【发布时间】:2018-10-15 15:59:49
【问题描述】:
我很难使用 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:##)
【问题讨论】:
-
更新到这个问题,我已经修复了,只模拟循环内的 DAO 调用,其余的其他调用通过使用反射注入服务调用来调用真正的测试方法,隔离不会覆盖 dao对象因此问题已解决,但无法追踪到底出了什么问题。
标签: java tdd dao easymock cucumber-junit