В настоящее время я изучаю структуру Mockito, и я создал несколько тестовых примеров с использованием Mockito.
Но затем я прочитал, что вместо вызова mock (SomeClass.class) я могу использовать @Mock
и @InjectMocks
. Единственное, что мне нужно сделать, это аннотировать мой тестовый класс с помощью @RunWith(MockitoJUnitRunner.class)
или использовать MockitoAnnotations.initMocks(this);
в методе @Before
.
Но это не работает. Кажется, что @Mock
не будет работать!
Вот мои 2 пересмотра кода - один с использованием аннотаций и без него.
Что я делаю неправильно?
public class ReportServiceImplTestMockito {
private TaskService mockTaskService; // This is the Mock object
private ReportServiceImpl service;
@Before
public void init(){
service = new ReportServiceImpl();
mockTaskService = mock(TaskServiceImpl.class);
service.setTaskServiceImpl(mockTaskService);
}
/// ...
Some tests
}
Как я уже сказал - эта работа великолепна. Но следующее:
@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {
@Mock
private TaskService mockTaskService;
@InjectMocks
private ReportServiceImpl service;
// Some tests
}
И вот класс ReportServiceImpl
:
@Service
public class ReportServiceImpl implements ReportService {
@Autowired
private TaskService taskServiceImpl;
public ReportServiceImpl(){}
public ReportServiceImpl(TaskService taskService){
this.taskServiceImpl = taskService;
}
public void setTaskServiceImpl(TaskService taskServiceImpl) {
this.taskServiceImpl = taskServiceImpl;
}
}
Что мне не хватает?