View Javadoc
1   package org.dbunit;
2   
3   import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
4   import static org.junit.jupiter.api.Assertions.assertThrows;
5   
6   import org.dbunit.assertion.DbComparisonFailure;
7   import org.dbunit.database.IDatabaseConnection;
8   import org.dbunit.operation.DatabaseOperation;
9   import org.dbunit.util.fileloader.DataFileLoader;
10  import org.dbunit.util.fileloader.FlatXmlDataFileLoader;
11  import org.junit.jupiter.api.Test;
12  
13  /**
14   * Integration test of composition of the PrepAndExpected (simulated DI).
15   *
16   * @author Jeff Jensen jeffjensen AT users.sourceforge.net
17   * @author Last changed by: $Author$
18   * @version $Revision$ $Date$
19   * @since 2.4.8
20   */
21  class DefaultPrepAndExpectedTestCaseDiIT
22  {
23      private static final String PREP_DATA_FILE_NAME =
24              "/xml/flatXmlDataSetTest.xml";
25      private static final String EXP_DATA_FILE_NAME =
26              "/xml/flatXmlDataSetTestChanged.xml";
27  
28      private static final VerifyTableDefinition TEST_TABLE =
29              makeVerifyTableDefinition("TEST_TABLE");
30      private static final VerifyTableDefinition SECOND_TABLE =
31              makeVerifyTableDefinition("SECOND_TABLE");
32      private static final VerifyTableDefinition EMPTY_TABLE =
33              makeVerifyTableDefinition("EMPTY_TABLE");
34      private static final VerifyTableDefinition PK_TABLE =
35              makeVerifyTableDefinition("PK_TABLE");
36      private static final VerifyTableDefinition ONLY_PK_TABLE =
37              makeVerifyTableDefinition("ONLY_PK_TABLE");
38      private static final VerifyTableDefinition EMPTY_MULTITYPE_TABLE =
39              makeVerifyTableDefinition("EMPTY_MULTITYPE_TABLE");
40  
41      private final DataFileLoader dataFileLoader = new FlatXmlDataFileLoader();
42  
43      private static VerifyTableDefinition makeVerifyTableDefinition(
44              final String tableName)
45      {
46          return new VerifyTableDefinition(tableName, new String[] {});
47      }
48  
49      @Test
50      void testSuccessRun_withMatchingPrepAndExpectedFiles_doesNotThrowException() throws Exception
51      {
52          // use same files to have no data comparison fails
53          final String[] prepDataFiles = {PREP_DATA_FILE_NAME};
54          final String[] expectedDataFiles = {PREP_DATA_FILE_NAME};
55          final VerifyTableDefinition[] tables = {TEST_TABLE, SECOND_TABLE,
56                  EMPTY_TABLE, PK_TABLE, ONLY_PK_TABLE, EMPTY_MULTITYPE_TABLE};
57  
58          final IDatabaseTester databaseTester = makeDatabaseTester();
59          final DefaultPrepAndExpectedTestCase tc =
60                  new DefaultPrepAndExpectedTestCase(dataFileLoader,
61                          databaseTester);
62  
63          tc.configureTest(tables, prepDataFiles, expectedDataFiles);
64  
65          assertDoesNotThrow(() -> tc.preTest(),
66                  "Did not expect tc.postTest() to throw, but it did!");
67  
68          // skip modifying data and just verify the insert
69  
70          assertDoesNotThrow(() -> tc.postTest(),
71                  "Did not expcte tc.postTest() to throw, but it did!");
72      }
73  
74      @Test
75      void testFailRun_withMismatchedExpectedFile_throwsDbComparisonFailure() throws Exception
76      {
77          final String[] prepDataFiles = {PREP_DATA_FILE_NAME};
78          final String[] expectedDataFiles = {EXP_DATA_FILE_NAME};
79          final VerifyTableDefinition[] tables = {TEST_TABLE, SECOND_TABLE,
80                  EMPTY_TABLE, PK_TABLE, ONLY_PK_TABLE, EMPTY_MULTITYPE_TABLE};
81  
82          final IDatabaseTester databaseTester = makeDatabaseTester();
83          final DefaultPrepAndExpectedTestCase tc =
84                  new DefaultPrepAndExpectedTestCase(dataFileLoader,
85                          databaseTester);
86  
87          tc.configureTest(tables, prepDataFiles, expectedDataFiles);
88  
89          assertDoesNotThrow(() -> tc.preTest(),
90                  "Did not expect tc.postTest() to throw, but it did!");
91  
92          // skip modifying data and just verify the insert
93  
94          assertThrows(DbComparisonFailure.class, () -> tc.postTest(),
95                  "Expected tc.postTest() to throw DbComparisonFailure, but it didn't");
96      }
97  
98      protected IDatabaseTester makeDatabaseTester() throws Exception
99      {
100         final DatabaseEnvironment dbEnv = DatabaseEnvironment.getInstance();
101         final IDatabaseConnection connection = dbEnv.getConnection();
102         final IDatabaseTester databaseTester = new DefaultDatabaseTester(connection);
103         // without this, the prep rows this test inserts are never cleaned up and leak
104         // into whatever test runs next against the same tables
105         databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
106         return databaseTester;
107     }
108 }