Unitils打破了标准的EasyMock行为?

时间:2013-09-04 06:28:09

标签: junit easymock unitils

在一个工作项目中,我遇到了一个真正烦人的bug /功能。我发现了一个解决方案,但我真的很好奇它为什么会发生。这一切都必须这样做,该项目有一些用unitils而不是简单的旧EasyMock编写的遗留测试。考虑下面两个测试类按顺序运行。

public class Test1{

    @TestedObject
    private MyService myService;    

    @InjectIntoByType protected Mock<MyRepository> myRepo;

    @Test
    public void aTest(){

        myService.doSomething();
        myRepo.assertNotInvoked().getById(EasyMock.anyLong());
    }               
}

public class Test2{
    private IMocksControl control;
    private MyOtherService myService;
    private MyOtherRepo myRepo;

    public Test2(){
        control = EasyMock.createControl();
        myRepo = control.createMock(MyOtherRepo.class);
        myService = new MyOtherService(myRepo);
    }

    @Test
    public void aTest(){
        myRepo.getById(5L);
        EasyMock.expectLastCall().andReturn(new MyObject(5L));

        control.replay()
            MyObject result = myService.doSomething();
        control.verify()
        Assert.assertEquals(5L,result.getId().longValue);
    }
}

当我分别运行两个测试时,它们运行正常。两个绿色都工作。但是,如果我在彼此之后立即运行它们,则第二次测试失败 java.lang.IllegalStateException:x匹配预期,y记录错误(x和y是当前的整数,因为这是一个假的例子,我没有实数)。

通过将assertNotInvoked行更改为:myRepo.assertNotInvoked()。getById(null);

我“修复”了这个问题。

这当然不是一个真正的解决办法,我只是绕过了匹配器的使用,我想知道我是否只是没有打破传统的测试案例...是否有任何人有足够的EasyMock + Unitils经验可以帮帮我理解这个?我最好的“猜测”是AssertNotInvoked没有使用EasyMock.replay(),EasyMock.verify()块正确结束......但我可能错了。

0 个答案:

没有答案