Jmock,Spring和测试中的anotated资源

时间:2013-01-04 07:51:17

标签: spring unit-testing testing jmock

我用Jmock为Spring编写控制器测试。控制器使用接口进行数据库操作。这些是服务类。我可以通过setter将它们jmock并传递给控制器​​。

Real controller的服务标有@ Reource-anotation

@Resource    私人服务;

测试     final Service service = context.mock(Service.class);     controller.setService(服务);     controller.CallMethodToTest();

在控制器代码中,服务对象通常使用Spring的@Resource anotation初始化。问题是控制器在某些内部调用中使用相同的服务,例如验证器或内部类。

Real validator也有一个标有@ Reource-anotation

的服务

@Resource    私人服务;

在测试中,我可以引入验证器对象,在其上设置服务并将其传递给控制器​​。

 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

这是常见的情况,我无法提供更具体的代码。我想这与控制器和验证器服务方法调用有关。任何人都可以给我一个解决这个问题的提示吗?

1 个答案:

答案 0 :(得分:0)

如果使用JMock,则每个模拟对象都有一个名称。这个名字必须是唯一的。

如果您使用方法Mockery.mock(Class<T> typeToMock),则名称将从类名派生。因此,您只能使用此方法为每个类创建一个模拟。

如果你需要同一个类的几个不同的模拟,那么请改用Mockery.mock(Class<T> typeToMock, String name),并给每个模拟一个不同的名称。