Commit 522685dee8d69dd11fb23dc701c69670501f4837
1 parent
d80fc452
test: CDI-Runner eingebaut und refactoring betrieben
Showing
5 changed files
with
39 additions
and
7 deletions
README.md
@@ -31,12 +31,16 @@ Dann kann/muss das Kennwort geändert werden, beispielsweise in 'root': | @@ -31,12 +31,16 @@ Dann kann/muss das Kennwort geändert werden, beispielsweise in 'root': | ||
31 | 31 | ||
32 | > ALTER USER 'root'@'localhost' IDENTIFIED BY ‘root‘; | 32 | > ALTER USER 'root'@'localhost' IDENTIFIED BY ‘root‘; |
33 | 33 | ||
34 | -Dann muss eine projektspezifische Datenbank erstellt und mit den nötigen Rechten versehen werden: | 34 | +Dann müssen die beiden projektspezifischen Datenbanken (für Test und "Produktion") erstellt und mit den nötigen Rechten versehen werden: |
35 | 35 | ||
36 | > create database swxercise; | 36 | > create database swxercise; |
37 | 37 | ||
38 | +> create database swxercise_test; | ||
39 | + | ||
38 | > grant all privileges on swxercise.* to 'root'@'localhost' identified by 'root'; | 40 | > grant all privileges on swxercise.* to 'root'@'localhost' identified by 'root'; |
39 | 41 | ||
42 | +> grant all privileges on swxercise_test.* to 'root'@'localhost' identified by 'root'; | ||
43 | + | ||
40 | ## MySQL-Datenbank im WildFly einbinden | 44 | ## MySQL-Datenbank im WildFly einbinden |
41 | 45 | ||
42 | Zunächst muss der JBoss WildFly Application Server installiert werden. Dies ist betriebssystemspezifisch. | 46 | Zunächst muss der JBoss WildFly Application Server installiert werden. Dies ist betriebssystemspezifisch. |
pom.xml
@@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||
19 | <mockito-version>2.7.22</mockito-version> | 19 | <mockito-version>2.7.22</mockito-version> |
20 | <dbunit-version>2.5.1</dbunit-version> | 20 | <dbunit-version>2.5.1</dbunit-version> |
21 | <slf4j-version>1.7.25</slf4j-version> | 21 | <slf4j-version>1.7.25</slf4j-version> |
22 | + <jglue-version>3.1.4</jglue-version> | ||
22 | <jackson-version>2.8.8.1</jackson-version> | 23 | <jackson-version>2.8.8.1</jackson-version> |
23 | 24 | ||
24 | <!-- Substituiert die Platzhalter in der "persistence.xml" --> | 25 | <!-- Substituiert die Platzhalter in der "persistence.xml" --> |
@@ -67,8 +68,7 @@ | @@ -67,8 +68,7 @@ | ||
67 | <groupId>org.dbunit</groupId> | 68 | <groupId>org.dbunit</groupId> |
68 | <artifactId>dbunit</artifactId> | 69 | <artifactId>dbunit</artifactId> |
69 | <version>${dbunit-version}</version> | 70 | <version>${dbunit-version}</version> |
70 | - <!--scope>test</scope--> | ||
71 | - <!-- TODO Wie koennen wir es erreichen, dass dies nur noch im Testkontext abhängig ist? --> | 71 | + <scope>test</scope> |
72 | </dependency> | 72 | </dependency> |
73 | <dependency> | 73 | <dependency> |
74 | <groupId>org.hibernate</groupId> | 74 | <groupId>org.hibernate</groupId> |
@@ -80,6 +80,13 @@ | @@ -80,6 +80,13 @@ | ||
80 | <artifactId>mysql-connector-java</artifactId> | 80 | <artifactId>mysql-connector-java</artifactId> |
81 | <version>${mysql-version}</version> | 81 | <version>${mysql-version}</version> |
82 | </dependency> | 82 | </dependency> |
83 | + <dependency> | ||
84 | + <groupId>org.jglue.cdi-unit</groupId> | ||
85 | + <artifactId>cdi-unit</artifactId> | ||
86 | + <version>${jglue-version}</version> | ||
87 | + <scope>test</scope> | ||
88 | + </dependency> | ||
89 | + <!-- Sorgt für eine schnellere Verwaltung der JSON-Umwandlung im REST-Kontext --> | ||
83 | <!-- dependency> | 90 | <!-- dependency> |
84 | <groupId>com.fasterxml.jackson.core</groupId> | 91 | <groupId>com.fasterxml.jackson.core</groupId> |
85 | <artifactId>jackson-databind</artifactId> | 92 | <artifactId>jackson-databind</artifactId> |
src/main/java/net/ziemers/swxercise/db/utils/JpaTestUtils.java renamed to src/test/java/net/ziemers/swxercise/db/utils/JpaTestUtils.java
src/test/java/net/ziemers/swxercise/lg/user/service/UserServiceTest.java
@@ -5,9 +5,21 @@ import javax.inject.Inject; | @@ -5,9 +5,21 @@ import javax.inject.Inject; | ||
5 | import net.ziemers.swxercise.db.utils.JpaTestUtils; | 5 | import net.ziemers.swxercise.db.utils.JpaTestUtils; |
6 | import net.ziemers.swxercise.lg.user.dto.UserDto; | 6 | import net.ziemers.swxercise.lg.user.dto.UserDto; |
7 | 7 | ||
8 | +import org.jglue.cdiunit.CdiRunner; | ||
8 | import org.junit.Before; | 9 | import org.junit.Before; |
9 | import org.junit.Test; | 10 | import org.junit.Test; |
10 | - | 11 | +import org.junit.runner.RunWith; |
12 | + | ||
13 | +/* | ||
14 | + * Testing your Java CDI application with CDI-Unit couldn't be easier. | ||
15 | + * Just specify @RunWith(CdiRunner.class) on your JUnit test class | ||
16 | + * to enable injection directly into the test class. | ||
17 | + * | ||
18 | + * To test classes in isolation we shouldn't be using their dependencies. | ||
19 | + * Instead we should be using a mock. There are many mocking libraries out | ||
20 | + * there, however CDI-Unit has extra support for Mockito @Mock annotations. | ||
21 | + */ | ||
22 | +@RunWith(CdiRunner.class) | ||
11 | public class UserServiceTest extends JpaTestUtils { | 23 | public class UserServiceTest extends JpaTestUtils { |
12 | 24 | ||
13 | private static boolean dbInitialized; | 25 | private static boolean dbInitialized; |
src/test/java/net/ziemers/swxercise/ui/UserViewControllerTest.java
@@ -15,9 +15,17 @@ import static org.mockito.Mockito.*; | @@ -15,9 +15,17 @@ import static org.mockito.Mockito.*; | ||
15 | @RunWith(MockitoJUnitRunner.class) | 15 | @RunWith(MockitoJUnitRunner.class) |
16 | public class UserViewControllerTest { | 16 | public class UserViewControllerTest { |
17 | 17 | ||
18 | + /* | ||
19 | + * You have the @InjectMocks annotation which tries to do constructor, | ||
20 | + * method and field dependency injection based on the type. | ||
21 | + */ | ||
18 | @InjectMocks | 22 | @InjectMocks |
19 | private UserViewController underTest; | 23 | private UserViewController underTest; |
20 | 24 | ||
25 | + /* | ||
26 | + * Mockito allows to configure the return values of its mocks via a fluent API. | ||
27 | + * Unspecified method calls return "empty" values | ||
28 | + */ | ||
21 | @Mock | 29 | @Mock |
22 | private UserService userService; | 30 | private UserService userService; |
23 | 31 | ||
@@ -112,10 +120,11 @@ public class UserViewControllerTest { | @@ -112,10 +120,11 @@ public class UserViewControllerTest { | ||
112 | } | 120 | } |
113 | 121 | ||
114 | private void loginUser() { | 122 | private void loginUser() { |
115 | - // wir simulieren den Erfolg des userService (der hier nicht getestet werden soll), | ||
116 | - // sofern das korrekte userDto an ihn übergeben wurde | 123 | + /* |
124 | + * The when().thenReturn() method chain is used to specify | ||
125 | + * a return value for a method call with pre-defined parameters. | ||
126 | + */ | ||
117 | when(userService.loginUser(userDto)).thenReturn(true); | 127 | when(userService.loginUser(userDto)).thenReturn(true); |
118 | - //when(userService.getSessionUser()).thenReturn(user); | ||
119 | 128 | ||
120 | actual = underTest.loginUser(userDto); | 129 | actual = underTest.loginUser(userDto); |
121 | } | 130 | } |