Java kod tabanımızda aşağıdaki modeli görmeye devam ediyorum:
/**
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(...);
}
}
Beni rahatsız eden şey, FooUtil
her yerde , çünkü test.
- Yapamam
FooUtil
Yöntemlerini statik , çünkü her ikisini deFooUtil
ve istemci sınıflarını test etmek için onları alay edemeyeceğim . - İle
FooUtil
tüketim yerinde bir örnek oluşturamıyorumnew
, çünkü test için alay edemeyeceğim.
En iyi seçeneğimin enjeksiyon kullanmak olduğunu düşünüyorum (ve yapıyorum), ancak kendi zorluklarını ekliyor. Ayrıca, birkaç util örneğinin iletilmesi, yöntem parametre listelerinin boyutunu şişirir.
Görmediğim kadar iyi idare etmenin bir yolu var mı?
Güncelleme: yardımcı sınıflar vatansız olduğundan, muhtemelen test için sınıfın temel statik alanını güncelleme yeteneğini korurken statik bir tekil INSTANCE
üye veya statik bir getInstance()
yöntem ekleyebilirim . Çok temiz görünmüyor.
FooUtil
yöntemlerin içine konulması FooSomething
, belki de bu yöntemlerin FooSomething
değiştirilmesi / genişletilmesi gereken özellikler vardır, böylece FooUtil
yöntemlere artık ihtiyaç duyulmaz. Lütfen bize FooSomething
bu sorulara iyi bir cevap sunmamıza yardımcı olacak daha somut bir örnek verin.