Business クラスのテストを行いたいのですが、この問題があります。モッキング オブジェクトの 1 つが、Sites、URL、ComplexObject などの他のクラスに多くの依存関係を持っています。
私の質問は、テストする必要があるメソッドでモックオブジェクトのこのメソッドを使用する必要がある場合、どうすればクラスを分離できますか? それらすべてをモックして、モックされたオブジェクトに追加する必要がありますか?
Business クラスのテストを行いたいのですが、この問題があります。モッキング オブジェクトの 1 つが、Sites、URL、ComplexObject などの他のクラスに多くの依存関係を持っています。
私の質問は、テストする必要があるメソッドでモックオブジェクトのこのメソッドを使用する必要がある場合、どうすればクラスを分離できますか? それらすべてをモックして、モックされたオブジェクトに追加する必要がありますか?
私がやりたいことは、すべての外部依存関係と静的メソッドへのフィールドを持つクラスを作成することです。例えば:
public class DanceMakerDependecies{
private URL url;
public String getCurrentUser(){ // not static, so very easy to test
return UserManager.currentUser().getName();
}
//getter and setters
}
public class DanceMaker{
public DanceMaker(DanceMakerDependecies dep){
..
}
// you could also create default constructor with the default dependencies
}
public class DanceMakerTest{
@Test
void dance(){
DanceMaker dm = new DanceMaker();
dm.setDependecies(EasyMock.createMock(DanceMakerDependecies.class));
//etc.
}
}
純粋主義者がすべてをクラスに注入することを好むことはわかっていますが、この方法でテストする方がはるかに簡単だと思います。試してみて、それについてどう思うか見てみましょう (ベストプラクティスやデザインパターンではないに違いありませんが、気に入っています)。