ある形式から別の形式にマップできるクラスがあります。これはレガシ コードなので、あえて書き直すつもりはありません。基本的にはプラグインのセットなので、1 つを変更すると、他のすべてを変更する必要があるかもしれません。テストを念頭に置いて開発されたものではありません。これは私の問題です。
interface Mapper {
void handle(ClassA classA);
void handle(ClassB classB);
}
public interface Publisher {
public void publish(MappedClass mappedClass);
}
class MyMapper implements Mapper {
private Publisher publisher;
public void setPublisher(final Publisher publisher) {
this.publisher = publisher;
}
public handle(ClassA classA) {
final MappedClass mappedClass = // Map from ClassA to MappedClass
publisher.publish(mappedClass);
}
public handle(ClassB classB) {
final MappedClass mappedClass = // Map from ClassB to MappedClass
publisher.publish(mappedClass);
}
}
わかった。したがって、「処理」MappedClass
されたクラスに応じて、さまざまな値で公開されます。これは、検証 (テスト) したい値です。publish
問題は、メソッドが呼び出されることをテストするコードを最初に記述しなければならないテストを取得することです。
private boolean wasCalled;
@Test
public void testClassAMapped() {
wasCalled = false;
final MyMapper myMapper = new MyMapper();
myMapper.setPublisher(new Publisher() {
public void publish(final MappedClass mappedClass) {
wasCalled = true;
// Code for verifying the fields in mappedClass
});
}
final ClassA classA = // Create classA
myMapper.handle(classA);
assertTrue(wasCalled);
}
したがって、最初にの状態をPublisher
最初に設定するモックを作成して、このメソッドが呼び出されたことを確認します (この例は単純化されているため、実際にはコードにディスパッチャーがあります... レガシー コードなので、変更したくありません) )、次に、正しいフィールド値があることを確認したいと思います。私が知りたいのは、これをテストするより良い方法を誰かが知っているかどうかです。、およびチェックは、多くのテストで多かれ少なかれ定型コードになりますが、それほど混乱を招きたくないので(独自のハック、テストベースクラスなど)、方法があるかどうか知りたいですこれはMockito、またはEasyMockですか?wasCalled
true
MappedClass
wasCalled
wasCalled