Юнитилс нарушает стандартное поведение EasyMock?
В проекте на работе я наткнулся на настоящую досадную ошибку / особенность. Я нашел решение, однако мне действительно любопытно, почему это происходит. Все это связано с тем, что в проекте есть несколько устаревших тестов, написанных с использованием 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);
Это, конечно, не совсем исправление, я просто обошел использование matchers, и мне интересно, если бы я не сломал старый тестовый пример с ним... Есть ли кто-нибудь с достаточным опытом EasyMock + Unitils, который мог бы помочь мне понять этот? Мое лучшее "предположение" состоит в том, что AssertNotInvoked не заканчивается должным образом блоком EasyMock.replay(), EasyMock.verify()... но я могу ошибаться.