1

我正在尝试使用 Springockito 和间谍来验证在端到端测试期间是否在服务方法上进行了调用。我正在自动装配该过程也将获得的服务,并对其进行监视。虽然对 myService 实例进行了检测,但 verify() 不会验证之前的调用,而是调用原始方法并传递一个 null 参数。为什么是这样?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = PatchedSpringockitoContextLoader.class, locations = {
    "classpath:/config.xml"
})
...
@Autowired
@WrapWithSpy
private MyService myService;
...
@Before
public void setup() {
    initMocks(this);
    ...
}
...
@Test
public void test() {
    // run the process that may or may not call the service
    verify(myService, never()).myMethod(any(MyParam.class));
}
4

1 回答 1

1

这里可能发生的情况是您的间谍对象使用@Transactional需要 Spring 在您的间谍周围添加 AOP 代理的注释(例如),这会导致 Mockito 发生故障。

尽管我不使用 Spock,但我遇到了与您相同的问题,我通过从 Spring 代理获取对代理的模拟或间谍的引用来解决它。

在这个GitHub 问题报告中查看建议的 hack 。

我没有使用 Spring Boot,所以我将解决方法代码包装在一个@BeforeClass方法中。

于 2018-10-02T13:08:25.557 回答