0

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

真正的控制器有一个标有@Reource-annotation 的服务

@Resource 私有服务服务;

测试最终服务 service = context.mock(Service.class); 控制器.setService(服务);控制器.CallMethodToTest();

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

真正的验证器也有一个标有@Reource-annotation 的服务

@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

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

4

1 回答 1

0

如果您使用 JMock,那么每个模拟对象都有一个名称。此名称必须是唯一的。

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

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

于 2013-01-04T11:14:50.570 回答