我有一些使用Mockito的集成测试,它们工作得很好。
但是,我想验证在我测试的过程中某个时候调用的方法的输入。问题是我不想模拟方法的行为,只想检查它的参数并执行真实的方法。如果我这样做:
@MockBean
private ClassThatIsCalled classThatIsCalled;
@Captor
private ArgumentCaptor<TypeOfMyParameter> typeOfMyParameter;
我得到一个错误,因为没有找到ClassThatIsCalled
的依赖项。即使我做了given(classThatIsCalled.callMethod(any())).willCallRealMethod();
,我仍然在嘲笑ClassThatIsCalled
,这不是我想做的。
有没有一种方法可以调用ClassThatIsCalled
的生产性代码(不模仿它),并简单地检查传递的参数?
TL;DR:我想使用@Spy
/@Captor
/similar来检查传递给类的参数,但不模拟类,而是调用它的真实的方法(使用.willCallRealMethod()
是不够的,因为模拟的类没有注入依赖项)。
1条答案
按热度按时间soat7uwm1#
你可以使用
@SpyBean
:可用于将Mockito spies应用于Spring
ApplicationContext
的注解。可以用作类级别的注解,也可以用于@Configuration
类或@RunWith
SpringRunner测试类中的字段。间谍可以按类型或bean名称应用。匹配类型(包括子类)上下文中的所有bean都将被spy Package 。如果没有定义现有的bean,将添加一个新的bean。将找不到应用程序上下文已知但不是bean(例如直接注册的那些)的依赖项,并且将spied bean添加到现有依赖项的上下文中。