//service to mock
public interface ServiceToMock {
public void operateDouble(Double dbValue);
public void operateCar(Car car);
}
//class under test
public class ClassUnderTest {
ServiceToMock service;
public void operateDouble(Double dbValue){
service.operateDouble(dbValue);
}
public void operateObject(Car car){
service.operateCar(car);
}
}
// класс модульного теста
@RunWith(EasyMockRunner.class)
public class TestEasyMockMatcherUnderTest {
@TestSubject
private final ClassUnderTest easyMockMatcherUnderTest = new ClassUnderTest();
@Mock
private ServiceToMock mock;
@Test
public void testOperateCar() {
//record
mock.operateCar(EasyMock.anyObject(Car.class));
EasyMock.expectLastCall();
// replay
EasyMock.replay(mock);
//matcher here...
easyMockMatcherUnderTest.operateObject(EasyMock.anyObject(Car.class));
//easyMockMatcherUnderTest.operateObject(new Car());
// verify
EasyMock.verify(mock);
}
@Test
public void testOperateDouble() {
// record
mock.operateDouble(EasyMock.anyDouble());
EasyMock.expectLastCall();
// replay
EasyMock.replay(mock);
easyMockMatcherUnderTest.operateDouble(EasyMock.anyDouble());
// verify
EasyMock.verify(mock);
}
}
Как показано в приведенном выше коде, я намерен протестировать два метода (operateDouble, operaObject). Но все немного странно, поскольку в блоке operaDouble все работает нормально, в то время как компилятор жалуется на «Исключение недопустимого состояния: 1 ожидаемых совпадений, 2 записанных». при запуске operaObject. И если закомментировать метод operaDouble, то компайнт исчезнет. Итак, в чем разница между Double и моим пользовательским объектом Car, поскольку Double также можно рассматривать как объект. И почему коды в operaObject работают хорошо, если закомментировать метод operaDouble?