Commit 522685dee8d69dd11fb23dc701c69670501f4837

Authored by Thomas Ziemer
1 parent d80fc452

test: CDI-Runner eingebaut und refactoring betrieben

README.md
... ... @@ -31,12 +31,16 @@ Dann kann/muss das Kennwort geändert werden, beispielsweise in 'root':
31 31  
32 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 36 > create database swxercise;
37 37  
  38 +> create database swxercise_test;
  39 +
38 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 44 ## MySQL-Datenbank im WildFly einbinden
41 45  
42 46 Zunächst muss der JBoss WildFly Application Server installiert werden. Dies ist betriebssystemspezifisch.
... ...
... ... @@ -19,6 +19,7 @@
19 19 <mockito-version>2.7.22</mockito-version>
20 20 <dbunit-version>2.5.1</dbunit-version>
21 21 <slf4j-version>1.7.25</slf4j-version>
  22 + <jglue-version>3.1.4</jglue-version>
22 23 <jackson-version>2.8.8.1</jackson-version>
23 24  
24 25 <!-- Substituiert die Platzhalter in der "persistence.xml" -->
... ... @@ -67,8 +68,7 @@
67 68 <groupId>org.dbunit</groupId>
68 69 <artifactId>dbunit</artifactId>
69 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 72 </dependency>
73 73 <dependency>
74 74 <groupId>org.hibernate</groupId>
... ... @@ -80,6 +80,13 @@
80 80 <artifactId>mysql-connector-java</artifactId>
81 81 <version>${mysql-version}</version>
82 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 90 <!-- dependency>
84 91 <groupId>com.fasterxml.jackson.core</groupId>
85 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 5 import net.ziemers.swxercise.db.utils.JpaTestUtils;
6 6 import net.ziemers.swxercise.lg.user.dto.UserDto;
7 7  
  8 +import org.jglue.cdiunit.CdiRunner;
8 9 import org.junit.Before;
9 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 23 public class UserServiceTest extends JpaTestUtils {
12 24  
13 25 private static boolean dbInitialized;
... ...
src/test/java/net/ziemers/swxercise/ui/UserViewControllerTest.java
... ... @@ -15,9 +15,17 @@ import static org.mockito.Mockito.*;
15 15 @RunWith(MockitoJUnitRunner.class)
16 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 22 @InjectMocks
19 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 29 @Mock
22 30 private UserService userService;
23 31  
... ... @@ -112,10 +120,11 @@ public class UserViewControllerTest {
112 120 }
113 121  
114 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 127 when(userService.loginUser(userDto)).thenReturn(true);
118   - //when(userService.getSessionUser()).thenReturn(user);
119 128  
120 129 actual = underTest.loginUser(userDto);
121 130 }
... ...