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 FooUtil
mana - mana, karena pengujian.
- Saya tidak dapat membuat
FooUtil
metode statis, karena saya tidak akan dapat mengejek mereka untuk pengujian keduanyaFooUtil
dan kelas kliennya. - Saya tidak dapat membuat contoh
FooUtil
di 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.
FooUtil
metode harus dimasukkan ke dalam FooSomething
, mungkin ada properti FooSomething
yang harus diubah / diperpanjang sehingga FooUtil
metode tidak diperlukan lagi. Tolong beri kami contoh yang lebih nyata tentang apa yang FooSomething
membantu kami memberikan jawaban yang baik untuk pertanyaan ini.