Ich habe ziemlich viele Artikel/Blog/StackOverflow Fragen gelesen, aber die Verwirrung in Bezug auf Mockito Mock und Spion bleibt noch. Also habe ich angefangen, sie in einer kleinen Spring Boot
App zu implementieren. Meine App hat eine ProductRepository
Verlängerung CrudRepository
.Mockito Mock und Spy in SpringBoot App
Derzeit teste ich das Repository von ProductRepository
spöttisch als
@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()));
}
}
Der Test besteht folgt. Ist das der richtige Weg? Ich möchte auch verstehen, wie man hier @Spy
verwendet und warum sollte ich es brauchen? Alle diesbezüglichen spezifischen Szenarien sind sehr willkommen.
Vielen Dank im Voraus.
Testen Sie nicht Ihre Repositories. Konzentrieren Sie sich auf die Serviceebene bezüglich Komponententests. Wenn Sie etwas Logik in Ihrem Repository haben, dann ist das wahrscheinlich ein Designfehler. –
Ja, habe den Punkt verstanden. Vielen Dank. – user2693135
@Maciej Kowalski Schließlich gelang es, Mocks und Spione basierend auf Ihren Eingaben zu verwenden, um die Service-Schicht zu testen. Aber weiß nicht, ob ich es richtig gemacht habe, Mein Repo ist https://github.com/ximanta/mockito_spy_example Ihre Beobachtungen werden wertvoll sein. Bei Bedarf kann dies als Frage gepostet werden. Vielen Dank. – user2693135