Здесь:
@Mock
User user;
Тогда вы идете:
user.setMyuserString("UserInput");
// verify this mock class return correct value
verify(user).setMyuserString("UserInput");
И это просто не имеет никакого смысла.Вы издеваетесь этот класс.Это означает, что вы создаете объект, который говорит: «Я - пользователь», но на самом деле это не так.Другими словами: единственное, что вы хотите / должны сделать, - это сказать вашей модели, чтобы она возвращала ожидаемое значение, когда вызывается его logMyUserString()
!
Как в:
when(user.logMyUserString()).thenReturn("User Input");
итеперь, когда вы правильно используете @InjectMocks, вызовите logMyUserString()
и mock вернет строку, которую вы сказали вернуть.Но вы хотите видеть здесь , чтобы понять, как легко инъекция может пойти не так.
Нет смысла использовать метод сеттера, потому что этот сеттер "искусственный", он ничего не устанавливает!
Кроме этого: почему у вас есть аннотация @Inject в вашем производствекодовые классы?Если вы думаете, что они вам нужны для mockito, нет, нет, не надо.
Наконец: я думаю, вам стоит вернуться и посмотреть хороший учебник по Mockito .Ваша настоящая проблема в том, что вам не хватает понимания того, что вы делаете.