【发布时间】:2019-04-01 05:18:58
【问题描述】:
我正在尝试使用@SpyBean 模拟@Component 的方法,但不起作用。 @MockBean 有效(跟随example)。我尝试、阅读和研究了很多方法,但都无法奏效。
示例如下:
@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())
我总是收到“not a mock”错误,因为对象始终是 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 相同 - 在
@BeforeEach中使用Mockito.initAnnotations(this) - 还有更多,我尝试了很多我不记得的组合...
我有什么遗漏的吗?还是我不知道的选项?
【问题讨论】:
标签: spring-boot kotlin pact pact-jvm