Compte tenu des éléments suivants @Component
classe :
@Component
public class MovieFinderImpl implements MovieFinder {
@Autowired
private Movie movie;
@Override
public List<Movie> findAll() {
List<Movie> movies = new ArrayList<>();
movies.add(movie);
return movies;
}
}
J'essaie d'apprendre comment tester unitairement cet exemple de composant sans faire de test d'intégration (donc pas de test d'intégration). @RunWith(SpringRunner.class)
y @SpringBootTest
sur la classe de test).
Quand ma classe de test ressemble à ceci :
public class MovieFinderImplTest {
@InjectMocks
private MovieFinderImpl movieFinderImpl;
@Mock
public Movie movieMock;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
movieMock.setTitle("test");
movieMock.setDirector("directorTest");
}
@Test
public void testFindAll() {
List<Movie> movies = movieFinderImpl.findAll();
Assert.assertNotNull(movies.get(0));
String expectedTitle = "test";
String actualTitle = movies.get(0).getTitle();
Assert.assertTrue(String.format("The expected name is %s, but the actual name is %s", expectedTitle, actualTitle), expectedTitle.equals(actualTitle));
String expectedDirector = "testDirector";
String actualDirector = movies.get(0).getDirector();
Assert.assertTrue(String.format("The expected name is %s, but the actual name is %s", expectedDirector, actualDirector), expectedDirector.equals(actualDirector));
}
}
... l'objet fantaisie n'est pas nul, mais les variables de classe de l'objet fantaisie le sont et donc :
java.lang.AssertionError: The expected name is test, but the actual name is null
J'ai parcouru http://www.vogella.com/tutorials/Mockito/article.html mais je n'ai pas trouvé d'exemple de la manière de définir une variable de classe sur un objet fictif.
Comment puis-je simuler correctement l'objet film ? Plus généralement, est-ce la bonne façon de tester la classe MovieFinderImp ? J'ai été inspiré par ce blog pour tester les composants. https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4
(ps : je me demande si je dois vraiment tester movie.get()
dans cette classe de test... peut-être que ma conception des tests est simplement mauvaise).