【发布时间】:2013-01-04 07:51:17
【问题描述】:
我使用 Jmock 为 Spring 编写控制器测试。控制器使用接口进行数据库操作。这些是服务类。我可以对它们进行 jmock 并通过 setter 将它们传递给控制器进行测试。
真正的控制器有一个用@Reource-annotation 标记的服务
@资源 私人服务服务;
测试 最终服务 service = context.mock(Service.class); 控制器.setService(服务); 控制器.CallMethodToTest();
在控制器代码中,服务对象通常使用 Spring 的 @Resource 注释进行初始化。问题是控制器在某些内部调用中使用相同的服务时,例如验证器或内部类。
真正的验证器也有一个用@Reource-annotation 标记的服务
@资源 私人服务服务;
在测试中我可以例如引入验证器对象,在其上设置服务并将其传递给控制器。
MyValidator validator = new MyValidator();
validator.setService(service);
controller.setValidator(validator);
比方说验证器。验证调用 service.getSomething。我需要为 getSomething(); 写期望。在控制器中也可以调用相同的方法。
context.checking(new Expectations() {
{
allowing(service).getSomething();
will(returnValue(mockData));
}
});
尽管允许基数,但这种情况会导致
allowed, already invoked 1 time
这是一种常见情况,我无法提供更具体的代码。我想这与控制器和验证器服务方法调用有关。谁能给我一个解决这个问题的提示?
【问题讨论】:
-
抱歉,您的问题很难理解,说实话我没有理解您的问题或场景。
-
控制器和控制器属性使用相同的模拟对象怎么样??
-
我仍然认为您没有描述您的问题:“问题是当控制器在某些内部调用中使用相同的服务时,例如验证器或内部类。” ——有些东西不见了。 - 无论如何,我希望我理解你的权利,你想创建两个相同类的模拟。我已经发布了这个主题的答案。
标签: spring unit-testing testing jmock