Dalam basis kode Java kami, saya terus melihat pola berikut:
/**
This is a stateless utility class
that groups useful foo-related operations, often with side effects.
*/
public class FooUtil {
public int foo(...) {...}
public void bar(...) {...}
}
/**
This class does applied foo-related things.
*/
class FooSomething {
int DoBusinessWithFoo(FooUtil fooUtil, ...) {
if (fooUtil.foo(...)) fooUtil.bar(...);
}
}
Yang mengganggu saya adalah bahwa saya harus melewati contoh di FooUtilmana - mana, karena pengujian.
- Saya tidak dapat membuat
FooUtilmetode statis, karena saya tidak akan dapat mengejek mereka untuk pengujian keduanyaFooUtildan kelas kliennya. - Saya tidak dapat membuat contoh
FooUtildi tempat konsumsi dengannew, lagi karena saya tidak akan dapat mengejeknya untuk pengujian.
Saya kira bahwa taruhan terbaik saya adalah menggunakan injeksi (dan saya lakukan), tetapi ia menambahkan kerepotan sendiri. Juga, melewatkan beberapa instance util mengembang ukuran daftar parameter metode.
Apakah ada cara untuk menangani ini dengan lebih baik yang tidak saya lihat?
Pembaruan: karena kelas utilitas tidak memiliki kewarganegaraan, saya mungkin dapat menambahkan anggota statis statis INSTANCE, atau getInstance()metode statis , sambil mempertahankan kemampuan untuk memperbarui bidang statis yang mendasari kelas untuk pengujian. Sepertinya tidak super bersih juga.
FooUtilmetode harus dimasukkan ke dalam FooSomething, mungkin ada properti FooSomethingyang harus diubah / diperpanjang sehingga FooUtilmetode tidak diperlukan lagi. Tolong beri kami contoh yang lebih nyata tentang apa yang FooSomethingmembantu kami memberikan jawaban yang baik untuk pertanyaan ini.