Я прочитал довольно много статей/вопросов блога/StackOverflow, но путаница в отношении Mockito mock и spy все еще остается. Итак, я начал использовать их в небольшом Spring Boot
приложении. Мое приложение имеет ProductRepository
, распространяющееся на CrudRepository
.Mockito Mock and Spy в приложении SpringBoot
В настоящее время я тестирую репозиторий насмехаясь над ProductRepository
следующим
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {RepositoryConfiguration.class})
public class ProductRepositoryMockTest {
@Mock
private ProductRepository productRepository;
@Mock
private Product product;
@Test
public void testMockCreation(){
assertNotNull(product);
assertNotNull(productRepository);
}
@Test
public void testSaveProduct() {
assertThat(product.getId(), is(equalTo(0)));
when(productRepository.save(product)).thenReturn(product);
productRepository.save(product);
//Obviously this will fail as product is not saved to db and hence
//@GeneratedValue won't come to play
//assertThat(product.getId() , is(not(0)));
}
@Test
public void testFindProductById() {
when(productRepository.findOne(product.getId())).thenReturn(product);
assertNotNull(productRepository.findOne(product.getId()));
assertEquals(product, productRepository.findOne(product.getId()));
}
}
тест проходит. Правильно ли это? Я также хочу понять, как использовать @Spy
здесь и зачем мне это нужно? Любые конкретные сценарии, связанные с этим, приветствуются.
Заранее спасибо.
Dont unit test your repositories .. сосредоточиться на сервисном уровне, касающемся модульного тестирования. Если у вас есть логика внутри вашего репозитория, то это, вероятно, недостаток дизайна. –
Да, понял. Благодарю. – user2693135
@Maciej Kowalski Наконец удалось использовать mocks и шпионов на основе ваших входов для тестирования уровня сервиса. Но не знаю, правильно ли я сделал это. Мой репо находится в https://github.com/ximanta/mockito_spy_example. Ваши наблюдения будут ценными. Если необходимо, можете опубликовать это как вопрос. Благодарю. – user2693135