Mercurial > hg > SpringPlayground
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 |
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 } |