期待使用EasyMock 3.5的多个void方法

时间:2017-10-26 09:25:34

标签: java unit-testing easymock

我遇到了一个与Easymock有关的问题,我试图让一个模拟期待一些无效的调用。但是我有一个问题就是模拟失败了。

所以我期待调用persistConfiguration(Map),我绝对不会被调用。但测试通过了所有相同的。

我的模拟界面如下所示:

public abstract class MyMockedClass{
     public abstract void start() throws Exception;
     public abstract void stop() throws Exception;
     public abstract void persistConfiguration(Map<String, Object> newConfiguration) throws Exception;
}

测试看起来像这样

@RunWith(EasyMockRunner.class)
public class MyFailingTest{
@Mock
private MyMockedClass provider;
....
    @Before
    public void setUp() throws Exception{
         Map<String, Object> expectedSetConfig = new HashMap<>();
         expectedSetConfig.put("String", setString);
         expectedSetConfig.put("File", testFile2.getCanonicalPath());

         /*Expect*/provider.start();
         expectLastCall().atLeastOnce();
         /*Expect*/provider.persistConfiguration(expectedSetConfig);
         expectLastCall().times(1);
         /*Expect*/provider.stop();
         expectLastCall().atLeastOnce();

         replay(provider);
    }

}

如果我删除期望provider.start()和匹配的getLastCall调用,则测试将失败并显示消息

  

意外的方法调用MyMockedClass.start():       MyMockedClass.persistConfiguration({String = newString,File = C:\ workspace \ meh \ stuff}):expected:1,actual:0       MyMockedClass.stop():预期:至少1,实际:0

因此测试可能会失败,但我的问题是:如果调用startstoppersistConfiguration方法,我如何使测试失败? 如果使用除包含这些特定值的映射之外的任何东西调用persistConfiguration方法,则会失败。

1 个答案:

答案 0 :(得分:0)

我发现了问题。

考试结束后我忘了给verify(provider)打电话。

设置

/*Expect*/provider.start();
expectLastCall().atLeastOnce();

只告诉模拟人员期待这个电话。除非您致电.atLeastOnce()

,否则它实际上并未检查verify部分