annotate spring-boot-playground/src/test/java/de/comline/spring/service/MovieServiceTestWithMockRepo.java @ 11:f3f9102ef7c0

Noch ein Test mit der in-memory Datenbank: diesmal wird ein Testdatensatz vorher rein geladen, der dann im Test geholt wird.
author Dirk Olmes <dirk.olmes@codedo.de>
date Thu, 13 Aug 2020 17:33:20 +0200
parents 7ce4367b50bc
children 4594ff529ab1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
1 package de.comline.spring.service;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
2
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
3 import static org.hamcrest.MatcherAssert.assertThat;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
4 import static org.hamcrest.Matchers.is;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
5 import static org.mockito.ArgumentMatchers.any;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
6 import static org.mockito.Mockito.mock;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
7 import static org.mockito.Mockito.when;
11
f3f9102ef7c0 Noch ein Test mit der in-memory Datenbank: diesmal wird ein Testdatensatz vorher rein geladen, der dann im Test geholt wird.
Dirk Olmes <dirk.olmes@codedo.de>
parents: 8
diff changeset
8 import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD;
5
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
9
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
10 import org.junit.jupiter.api.DisplayName;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
11 import org.junit.jupiter.api.Test;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
12 import org.springframework.beans.factory.annotation.Autowired;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
13 import org.springframework.boot.test.context.SpringBootTest;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
14 import org.springframework.context.annotation.Bean;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
15 import org.springframework.context.annotation.Configuration;
11
f3f9102ef7c0 Noch ein Test mit der in-memory Datenbank: diesmal wird ein Testdatensatz vorher rein geladen, der dann im Test geholt wird.
Dirk Olmes <dirk.olmes@codedo.de>
parents: 8
diff changeset
16 import org.springframework.test.annotation.DirtiesContext;
5
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
17
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
18 import de.comline.spring.entity.Movie;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
19 import de.comline.spring.repository.MovieRepository;
8
7ce4367b50bc Ein echter Unit Test, der eine in-memory H2 als Teil vom Test startet, das Schema mit liquibase erzeugt und nach dem Test wieder stoppt. Das alles ohne die Web Controller zu starten.
Dirk Olmes <dirk.olmes@codedo.de>
parents: 5
diff changeset
20 import de.comline.spring.service.MovieServiceTestWithMockRepo.TestConfig;
5
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
21
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
22 @SpringBootTest(classes = {
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
23 MovieService.class,
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
24 TestConfig.class
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
25 })
11
f3f9102ef7c0 Noch ein Test mit der in-memory Datenbank: diesmal wird ein Testdatensatz vorher rein geladen, der dann im Test geholt wird.
Dirk Olmes <dirk.olmes@codedo.de>
parents: 8
diff changeset
26 @DirtiesContext(classMode = AFTER_EACH_TEST_METHOD)
8
7ce4367b50bc Ein echter Unit Test, der eine in-memory H2 als Teil vom Test startet, das Schema mit liquibase erzeugt und nach dem Test wieder stoppt. Das alles ohne die Web Controller zu starten.
Dirk Olmes <dirk.olmes@codedo.de>
parents: 5
diff changeset
27 public class MovieServiceTestWithMockRepo {
5
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
28 @Autowired
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
29 private MovieService service;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
30
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
31 @Test
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
32 @DisplayName("Test with a mock movie repository")
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
33 void withMockRepository() {
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
34 String title = "the-movie-title";
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
35
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
36 Movie movie = service.createMovie(title);
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
37 assertThat(movie.getTitle(), is(title));
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
38 }
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
39
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
40 @Configuration
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
41 static class TestConfig {
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
42 @Bean
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
43 MovieRepository createMockRepository() {
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
44 MovieRepository mockRepository = mock(MovieRepository.class);
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
45 when(mockRepository.save(any())).thenAnswer(invocation -> {
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
46 return invocation.getArgument(0);
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
47 });
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
48 return mockRepository;
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
49 }
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
50 }
227f3105fedd Erster Unit Test, der das repository einfach nur mockt
Dirk Olmes <dirk.olmes@codedo.de>
parents:
diff changeset
51 }