Я не знаком с @Autowire
, так что это может быть совершенно неверное предположение, но оно также слишком велико для комментария, поэтому здесь все идет.
Исключение в основном объясняет, что объект, который вы ' пытаться издеваться - это не издеваться, и из того, что я вижу, это правда.
Обычно можно сделать что-то вроде:
@Mock
lateinit var myIntF: Myinterface
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
}
И теперь издевательство создано, и вы можно настроить его на when
, как у вас.
Существуют и другие параметры для инициализации, например, запуск теста с модулем тестирования mockito . Я полагаю, что есть также тестовое правило, и у вас всегда будет mockito- kotlin, что отлично подходит для кода kotlin, и, на мой взгляд, намного проще:
lateinit var myIntF = mock<Myinterface>()
@Test
fun controllerTest(){
myIntF.stub {
on { getmyStringData() } doReturn "Some mock string"
}
}
Дело в том, что я думаю, что вы на самом деле не создавали макет, а mockito нуждается в этом, потому что, если я не ошибаюсь, он работает, наследуя от класса, который он насмехается.
Редактировать :
Как указано в комментариях, вы можете протестировать контроллер. Это означает, что вам нужно создать его экземпляр с помощью созданных вами макетов. Один из предложенных способов - использовать @InjectMocks
. Что-то вроде:
@InjectMocks
lateinit var controller: MyController
Но, не зная всего тестового кода, трудно сказать, что это именно то, что вам нужно.