有一个界面:
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 块和魔术布尔标志的非常冗长代码的解决方案......
对其进行单元测试的最佳方法是什么?也许代码设计不好?