Commit 3806707c2f480c0bcdb20a035fcacbee874d1ff2

Authored by Thomas Ziemer
1 parent 1d77dd1a

test: Stubs für RoleViewController- und RoleService-Tests angelegt

src/test/java/net/ziemers/swxercise/db/utils/JpaTestUtils.java
... ... @@ -74,6 +74,7 @@ public class JpaTestUtils {
74 74 return em;
75 75 }
76 76  
  77 + @SuppressWarnings("unused")
77 78 protected void clearEm() {
78 79 em = null;
79 80 }
... ... @@ -118,16 +119,17 @@ public class JpaTestUtils {
118 119 return emf;
119 120 }
120 121  
121   - public void txBegin() {
  122 + protected void txBegin() {
122 123 tx = getEm().getTransaction();
123 124 tx.begin();
124 125 }
125 126  
126   - public void txCommit() {
  127 + protected void txCommit() {
127 128 tx.commit();
128 129 }
129 130  
130   - public void txRollback() {
  131 + @SuppressWarnings("unused")
  132 + protected void txRollback() {
131 133 tx.rollback();
132 134 }
133 135  
... ... @@ -151,7 +153,8 @@ public class JpaTestUtils {
151 153 resourceAsStream = JpaTestUtils.class.getClassLoader().getResourceAsStream(NET_ZIEMERS_SWXERCISE_PKG + resourceName);
152 154 dataSet = flatXmlDataSetBuilder.build(resourceAsStream);
153 155 } catch (Exception e) {
154   - throw e;
  156 + logger.warn("Exception while reading test data definitions file named \"{}\". If your tests fail, check existence of file!", resourceName);
  157 + // throw e;
155 158 } finally {
156 159 if (dtdStream != null) {
157 160 dtdStream.close();
... ... @@ -171,20 +174,22 @@ public class JpaTestUtils {
171 174 * @throws Exception wenn dabei etwas schiefläuft
172 175 */
173 176 protected void initDbWith(String resourceName) throws Exception {
174   - IDataSet dataset = readDataset(resourceName);
175   - try {
176   - SessionImpl delegate = (SessionImpl) this.getEm().getDelegate();
177   - DatabaseConnection connection = new DatabaseConnection(delegate.connection());
178   - IMetadataHandler mysqlHandler = new MySqlMetadataHandler();
179   - IDataTypeFactory mySqlDataTypeFactory = new MySqlDataTypeFactory();
180   - connection.getConfig().setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, mysqlHandler);
181   - connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, mySqlDataTypeFactory);
182   - DatabaseOperation.INSERT.execute(connection, dataset);
183   - } catch (DatabaseUnitException qe) {
184   - logger.warn("Database entries already inserted. If your tests fail, check your sql inserts for constraint violations!");
185   - logger.warn(qe.getMessage());
186   - logger.warn(qe.getMessage(), qe);
187   - throw qe;
  177 + final IDataSet dataset = readDataset(resourceName);
  178 + if (dataset != null) {
  179 + try {
  180 + SessionImpl delegate = (SessionImpl) this.getEm().getDelegate();
  181 + DatabaseConnection connection = new DatabaseConnection(delegate.connection());
  182 + IMetadataHandler mysqlHandler = new MySqlMetadataHandler();
  183 + IDataTypeFactory mySqlDataTypeFactory = new MySqlDataTypeFactory();
  184 + connection.getConfig().setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, mysqlHandler);
  185 + connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, mySqlDataTypeFactory);
  186 + DatabaseOperation.INSERT.execute(connection, dataset);
  187 + } catch (DatabaseUnitException qe) {
  188 + logger.warn("Database entries already inserted. If your tests fail, check your sql inserts for constraint violations!");
  189 + logger.warn(qe.getMessage());
  190 + logger.warn(qe.getMessage(), qe);
  191 + throw qe;
  192 + }
188 193 }
189 194 }
190 195  
... ... @@ -193,7 +198,7 @@ public class JpaTestUtils {
193 198 *
194 199 * @throws Exception Wirft eventuelle SQL- und I/O-Exceptions
195 200 */
196   - public void cleanDb() throws Exception {
  201 + protected void cleanDb() throws Exception {
197 202 String schema = getCurrentSchema();
198 203 List<String> tables = getTableNamesToBeEmptied();
199 204 getEm().getTransaction().begin();
... ... @@ -219,7 +224,7 @@ public class JpaTestUtils {
219 224 return null;
220 225 }
221 226  
222   - public List<String> getTableNamesToBeEmptied() throws Exception {
  227 + private List<String> getTableNamesToBeEmptied() throws Exception {
223 228 return showTablesNotEmpty(getCurrentSchema());
224 229 }
225 230  
... ... @@ -240,7 +245,7 @@ public class JpaTestUtils {
240 245 *
241 246 * @return eine Liste der zu ignorierenden Tabellen
242 247 */
243   - public List<String> getSkippingTables() {
  248 + private List<String> getSkippingTables() {
244 249 return Arrays.asList(
245 250 "hibernate_sequence",
246 251 "schema_version"); // FlywayDB Metatable
... ... @@ -255,7 +260,7 @@ public class JpaTestUtils {
255 260 return result;
256 261 }
257 262  
258   - public String getTruncateStatement(String schema, String table) {
  263 + private String getTruncateStatement(String schema, String table) {
259 264 return String.format("DELETE FROM %s.%s;", schema, table);
260 265 }
261 266  
... ...
src/test/java/net/ziemers/swxercise/lg/user/service/RoleServiceTest.java 0 → 100644
  1 +package net.ziemers.swxercise.lg.user.service;
  2 +
  3 +import net.ziemers.swxercise.db.dao.user.UserDao;
  4 +import net.ziemers.swxercise.db.utils.JpaTestUtils;
  5 +import org.jglue.cdiunit.CdiRunner;
  6 +import org.junit.Before;
  7 +import org.junit.Test;
  8 +import org.junit.runner.RunWith;
  9 +
  10 +import javax.inject.Inject;
  11 +
  12 +/**
  13 + * Testing your Java CDI application with CDI-Unit couldn't be easier.
  14 + * Just specify @RunWith(CdiRunner.class) on your JUnit test class
  15 + * to enable injection directly into the test class.
  16 + *
  17 + * To test classes in isolation we shouldn't be using their dependencies.
  18 + * Instead we should be using a mock. There are many mocking libraries out
  19 + * there, however CDI-Unit has extra support for Mockito @Mock annotations.
  20 + *
  21 + * Quelle: http://jglue.org/cdi-unit-user-guide/
  22 + */
  23 +@RunWith(CdiRunner.class)
  24 +public class RoleServiceTest extends JpaTestUtils {
  25 +
  26 + private static boolean dbInitialized;
  27 +
  28 + @Inject
  29 + private UserDao userDao;
  30 +
  31 + @Inject
  32 + private UserService underTest;
  33 +
  34 + @Before
  35 + public void setUp() throws Exception {
  36 + if (!dbInitialized) {
  37 + cleanDb();
  38 + initDbWith("RoleServiceTestData.xml");
  39 + dbInitialized = true;
  40 + }
  41 + }
  42 +
  43 + @Test
  44 + public void testSomething() {
  45 +
  46 + given();
  47 +
  48 + when();
  49 +
  50 + then();
  51 + }
  52 +
  53 + // given
  54 +
  55 + private RoleServiceTest given() {
  56 + return this;
  57 + }
  58 +
  59 + // when
  60 +
  61 + private RoleServiceTest when() {
  62 + return this;
  63 + }
  64 +
  65 + // then
  66 +
  67 + private RoleServiceTest then() {
  68 + return this;
  69 + }
  70 +
  71 +}
... ...
src/test/java/net/ziemers/swxercise/ui/RoleViewControllerTest.java 0 → 100644
  1 +package net.ziemers.swxercise.ui;
  2 +
  3 +import net.ziemers.swxercise.lg.user.service.RoleService;
  4 +import org.junit.Test;
  5 +import org.junit.runner.RunWith;
  6 +import org.mockito.InjectMocks;
  7 +import org.mockito.Mock;
  8 +import org.mockito.junit.MockitoJUnitRunner;
  9 +
  10 +@RunWith(MockitoJUnitRunner.class)
  11 +public class RoleViewControllerTest {
  12 +
  13 + /*
  14 + * You have the @InjectMocks annotation which tries to do constructor,
  15 + * method and field dependency injection based on the type.
  16 + */
  17 + @InjectMocks
  18 + private RoleViewController underTest;
  19 +
  20 + /*
  21 + * Mockito allows to configure the return values of its mocks via a fluent API.
  22 + * Unspecified method calls return "empty" values
  23 + */
  24 + @Mock
  25 + private RoleService roleService;
  26 +
  27 + @Test public void testSomething() {
  28 +
  29 + given();
  30 +
  31 + doing();
  32 +
  33 + then();
  34 + }
  35 +
  36 + // given
  37 +
  38 + private RoleViewControllerTest given() {
  39 + return this;
  40 + }
  41 +
  42 + // doing (when)
  43 +
  44 + private RoleViewControllerTest doing() {
  45 + return this;
  46 + }
  47 +
  48 + // then
  49 +
  50 + private RoleViewControllerTest then() {
  51 + return this;
  52 + }
  53 +
  54 +}
... ...