Как правильно использовать Mockito для проверки на весеннем тесте @Service - PullRequest
0 голосов
/ 19 июня 2019

У меня есть этот сервис (все в котлине):

@Service
class MyService {

  fun getSomeString(): String = "test"
}

И этот интеграционный тестовый класс:

@RunWith(SpringRunner::class)
@SpringBootTest
@EmbeddedKafka // used on some kafka tests
class BasicTests {

и метод:

@Test
fun `test method count`() {
    // here I have a kafka producer sending a message to a topic that ends up 
    // calling myService.getSomeString via @KafkaListener from other services
    verify(someObjectRelatedToMyService, atLeast(1)).getSome()
}

Вместо someObjectRelatedToMyService Я пытался использовать

@Autowired
lateinit var myService: MyService

Но потом я получил Argument passed to verify() is of type MyService and is not a mock!

Но когда я использую

@Mock
lateinit var myMock: MyService

Я получаю Actually, there were zero interactions with this mock.

И на самом деле, для меня это имеет смысл, поскольку мой макет не был вызван, но мой реальный сервис в приложении был.

Можно ли считать вызовы методов от моего реального объекта?

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Вы можете шпионить за реальным объектом , чтобы посчитать вызовы метода следующим образом:

@Test
fun `test method count`() {
    Mockito.spy(someObjectRelatedToMyService)
    verify(someObjectRelatedToMyService, atLeast(1)).getSome()
}

Как видите, единственное, что вам нужно сделать, - это вызвать метод spy , который позволяет отслеживать взаимодействия с целевым объектом.

При добавлении этого вызова перед методом verify вы больше не должны получать ошибку, что объект не является фиктивным.

0 голосов
/ 19 июня 2019

[Публикация здесь, так как нет комментариев к комментариям] Вы пытались использовать @Spy?Затем вы можете указать, какие методы нужно смоделировать и какие методы вызывать.Я предполагал, что вы также можете применить Mockito.verify к шпионам ...

...