インターフェースがあります:
interface IEventListener
{
void onEvent(List <IEvent> events);
}
イベントクラスがあります:
class EventB
{
private final int id;
private final A a;
private final String somethingElse;
...
// constructors, getters
...
}
そして、テストするクラスがあります:
class Doer
{
IEventListener eventListener;
void doSomething(Aaa a)
{
eventListener.onEvent(Arrays.asList(new EventA(1), new EventC(2)));
...
eventListener.onEvent(Arrays.asList(new EventB(42, a.getA(), "foo"), new EventA(3), new EventB(0, a.getA(), "bar")));
...
eventListener.onEvent(Arrays.asList(new EventC(4)));
}
}
これDoer
はテストする必要があるコードであり、メソッドdoSomething
は一連のイベントを生成します。特定の条件で特定のイベントを生成するかどうかをテストする必要があります。
より正確には、メソッドを呼び出し、doSomething
EventB が「42」で送信A
され、メソッド引数から送信されることを確認する単体テストが必要ですa
。他のすべてのイベントは無視する必要があります。
このようなテストを行うために、ArgumentCaptor、for-blocks、および魔法のブールフラグを使用した非常に冗長なコードを含むソリューションしか思いつきませんでした...
単体テストを作成する最良の方法は何ですか? コード設計が悪いのでしょうか?