Я сейчас реструктурирую свои юнит-тесты.Структура теперь выглядит следующим образом:
Класс теста:
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest{
@InjectMocks
private Service serviceMock;
private TestData testDataInstance = new TestData();
@Before
public void setUp(){
testDataInstance = new TestData();
testDataInstance.mockRepository();
}
@Test
public void testSth(){
...
}
}
Класс TestData:
public final class TestData{
// this is of course an implemented repo
@Mock
public JpaRepository repository;
public final TestDataObj testDataObj = new TestDataObj();
public void mockRepositories(){
MockitoAnnotations.initMocks(this);
this.testDataObj.mockJpaRepository(jpaRepository);
}
}
Класс TestDataObj:
public class TestDataObj{
public List<DataClass> testData = new LinkedList<DataClass>(...);
public void mockJpaRepository(JpaRepository repo){
given(repo.foo(Mockito.any(bar.class))).will(new Answer<List<DataClass>>(){
public List<DataClass> answer(InvocationOnMock invocation){
...
}
}
}
}
Если я выполняю метод testSth (), макет JpaRepository присутствует, но метод foo возвращает ноль, даже если он должен хотя бы вернуть пустой список.
Идея, лежащая в основе вложения макета хранилищатакое возможность многократного использования.
Вопросы: 1. Создан ли макет сервиса до или после метода setUp?2. Можно ли даже назвать данный ... будет внутри вложенного объекта, как я?