【发布时间】:2015-03-16 10:48:51
【问题描述】:
//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,operateObject)。但是事情有点奇怪,因为在operatedDouble块中一切都运行良好,而编译器抱怨“非法状态异常:1个匹配器预期,2个记录。”运行时操作对象。如果将方法operatedDouble注释掉,compaint就消失了。那么Double和我的自定义对象Car有什么区别,因为Double也可以被认为是一个对象。以及为什么将operateDouble方法注释掉时,operateObject中的代码运行良好?
【问题讨论】: