模拟实例触发事件

时间:2015-12-23 12:38:09

标签: java unit-testing mockito

我有一个我想要进行单元测试的类,它有一个依赖项Foo,我想模拟它。当调用某个方法时,此类Foo有时会触发事件。但是不知道如何模仿Foo类来获得这种行为。

那么,我怎么能模拟类Foo,它的行为类似于下面的代码?到目前为止,我使用了Mockito,但如果mockito不提供所需的功能,我会对新的框架开放。

//This is how the class Foo should act when it is mocked
public class Foo()
{
    private Listener listener;
    public void addListener(Listener listener)
    {
        this.listener = listener;
    }

    public void callMethodWhichMayFireAnEvent()
    {
        listener.event();
    }
}

1 个答案:

答案 0 :(得分:1)

为了得到你要求的东西(可能是你真正需要的东西),你可以使用答案......

   final Listener listener = ...; // put your listener here
   Foo fooMock = Mockito.mock(Foo.class);

   Mockito.doAnswer( new Answer() {

    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        listener.event(); // this calls your listener
        return null; // actual Method is void, so this will be ignored anyway
    }

   }).when( fooMock.callMethodWhichMayFireAnEvent() );

因此,每当调用fooMock.callMethodWhichMayFireAnEvent()时,它都会调用event()对象的listener方法。