【问题标题】:what's the difference between object and primitive type when using matchers in EasyMock在 EasyMock 中使用匹配器时,对象和原始类型有什么区别
【发布时间】: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中的代码运行良好?

【问题讨论】:

    标签: easymock matcher


    【解决方案1】:

    EasyMock.anyDoubleEasyMock.anyObject 不适合在回放模式下使用。它们用于在记录模式下设置您的期望。

    在您的第一个测试中使用它 (testOperateCar):

    easyMockMatcherUnderTest.operateObject(new Car());
    

    在你的第二个中是这样的 (testOperateDouble):

    easyMockMatcherUnderTest.operateDouble(1.0);
    

    顺便说一句,你不需要打电话给EasyMock.expectLastCall。仅当您希望多次调用 void 方法时才有用,例如:

    mock.operateCar(EasyMock.anyObject(Car.class));
    EasyMock.expectLastCall().times(3);
    

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 2012-02-06
      • 2016-09-26
      • 2011-11-25
      • 1970-01-01
      • 2016-01-02
      • 2017-07-16
      • 1970-01-01
      相关资源
      最近更新 更多