Я пытаюсь использовать @SpyBean
, чтобы высмеивать метод @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:
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
, но он был разрешен к тому же вышеуказанному компоненту
- Использование
Mockito.initAnnotations(this)
в @BeforeEach
- и более, я пробовал так много комбинаций, что не помню ...
Есть что-то, что я пропускаю? Или вариант, который я не знаю?