我正在尝试使用@SpyBean
来模拟 a 的方法@Component
并且不起作用。@MockBean
作品(按照示例)。我已经尝试、阅读和研究了很多方法,但无法使其发挥作用。
这是示例:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment. DEFINED_PORT)
@ExtendWith(SpringExtension::class)
@Provider("MyMicroService")
@PactFolder("../../../pacts")
internal class ClientContracts {
@SpyBean
private lateinit var myService: MyService
@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider::class)
fun pactVerificationTestTemplate(context: PactVerificationContext) {
context.verifyInteraction()
}
@State("default", "NO_DATA")
fun toDefaultState() {
reset(processService)
}
}
(我超级简化了测试功能,所以它更容易阅读,我实际上会这样做doReturn(...).when(...).blah()
)
我总是收到“不是模拟”错误,因为对象始终是 Spring CGLIB 包装的 bean:
org.mockito.exceptions.misusing.NotAMockException: Argument should be a mock, but is: class com.blah.MyServiceImpl$$EnhancerBySpringCGLIB$$9712a2a5
at com.nhaarman.mockitokotlin2.MockitoKt.reset(Mockito.kt:36)
...
我试过了:
- 和
@SpringJUnitConfig
- 有一个单独的
@TestConfiguration
,但解决了上面相同的 bean Mockito.initAnnotations(this)
在一个使用@BeforeEach
- 还有更多,我尝试了很多我不记得的组合......
有什么我想念的吗?还是我不知道的选项?