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          // reopen connection as configureTest() closes its own after
66          // obtaining the case-sensitivity feature setting; preTest() and
67          // postTest() then share and close this one connection themselves
68          // instead of each needing a fresh one (#800)
69          final IDatabaseTester databaseTesterNew1 = makeDatabaseTester();
70          tc.setDatabaseTester(databaseTesterNew1);
71  
72          assertDoesNotThrow(() -> tc.preTest(),
73                  "Did not expect tc.postTest() to throw, but it did!");
74  
75          // skip modifying data and just verify the insert
76  
77          assertDoesNotThrow(() -> tc.postTest(),
78                  "Did not expcte tc.postTest() to throw, but it did!");
79      }
80  
81      @Test
82      void testFailRun_withMismatchedExpectedFile_throwsDbComparisonFailure() throws Exception
83      {
84          final String[] prepDataFiles = {PREP_DATA_FILE_NAME};
85          final String[] expectedDataFiles = {EXP_DATA_FILE_NAME};
86          final VerifyTableDefinition[] tables = {TEST_TABLE, SECOND_TABLE,
87                  EMPTY_TABLE, PK_TABLE, ONLY_PK_TABLE, EMPTY_MULTITYPE_TABLE};
88  
89          final IDatabaseTester databaseTester = makeDatabaseTester();
90          final DefaultPrepAndExpectedTestCase tc =
91                  new DefaultPrepAndExpectedTestCase(dataFileLoader,
92                          databaseTester);
93  
94          tc.configureTest(tables, prepDataFiles, expectedDataFiles);
95  
96          // reopen connection as configureTest() closes its own after
97          // obtaining the case-sensitivity feature setting; preTest() and
98          // postTest() then share and close this one connection themselves
99          // instead of each needing a fresh one (#800)
100         final IDatabaseTester databaseTesterNew1 = makeDatabaseTester();
101         tc.setDatabaseTester(databaseTesterNew1);
102         assertDoesNotThrow(() -> tc.preTest(),
103                 "Did not expect tc.postTest() to throw, but it did!");
104 
105         // skip modifying data and just verify the insert
106 
107         assertThrows(DbComparisonFailure.class, () -> tc.postTest(),
108                 "Expected tc.postTest() to throw DbComparisonFailure, but it didn't");
109     }
110 
111     protected IDatabaseTester makeDatabaseTester() throws Exception
112     {
113         final DatabaseEnvironment dbEnv = DatabaseEnvironment.getInstance();
114         final IDatabaseConnection connection = dbEnv.getConnection();
115         final IDatabaseTester databaseTester = new DefaultDatabaseTester(connection);
116         // without this, the prep rows this test inserts are never cleaned up and leak
117         // into whatever test runs next against the same tables
118         databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
119         return databaseTester;
120     }
121 }