尽管具有FOR循环的模拟语句,但仍发生意外的方法调用:EasyMock

时间:2018-10-15 15:59:50

标签: java tdd dao easymock cucumber-junit

我很难用EasyMock解决意外的方法调用错误问题,该方法在for循环内进行了DAO调用。

for ( Car obj : carList) {
    objModified=carHelper.addPrice(obj);
    carServiceDao.create(objModified);
}

测试方案:

carServiceDao = EasyMock.createMock(ICarDaoDao.class);

EasyMock.expect(carServiceDao.create(EasyMock.anyObject(Car.class))).andReturn(carList);
  

错误情况:                           java.lang.AssertionError:                           意外的方法调用carServiceDao.create(null):                           在org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44)                           在org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94)                           在org.easymock.internal.ClassProxyFactory $ MockMethodInterceptor.intercept(ClassProxyFactory.java:97)                           在############################。###### Impl $$ EnhancerByCGLIB $$ b59c96b7.create()                           在✽。汽车服务运行时(CarCalculations.feature:##)

另一种测试场景:

EasyMock.expect(carServiceDao.create(carList)).andReturn(carList);
  

java.lang.AssertionError:意外的方法调用carServiceDao.create(Car [name:###,color:####,fuel:###]):                 在org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44)                 在org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94)                 在org.easymock.internal.ClassProxyFactory $ MockMethodInterceptor.intercept(ClassProxyFactory.java:97)                在############################。###### Impl $$ EnhancerByCGLIB $$ b59c96b7.create()                在✽。汽车服务运行时(CarCalculations.feature:##)

1 个答案:

答案 0 :(得分:0)

不能帮助。我需要一个完整的例子。但是缺少重播部分。

我认为问题在于EasyMock.expect(carServiceDao.create(EasyMock.anyObject(Car.class))).andReturn(carList);仅记录一个呼叫。然后循环执行许多调用。因此,在第二次致电时,它将给出您所看到的错误。

执行类似EasyMock.expect(carServiceDao.create(EasyMock.anyObject(Car.class))).andStubReturn(carList);的操作即可解决问题。