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.BeforeEach;
12  import org.junit.jupiter.api.Test;
13  
14  /**
15   * Integration test of extends of the PrepAndExpected.
16   *
17   * @author Jeff Jensen jeffjensen AT users.sourceforge.net
18   * @author Last changed by: $Author$
19   * @version $Revision$ $Date$
20   * @since 2.4.8
21   */
22  class DefaultPrepAndExpectedTestCaseExtIT extends DefaultPrepAndExpectedTestCase
23  {
24      private static final String PREP_DATA_FILE_NAME =
25              "/xml/flatXmlDataSetTest.xml";
26      private static final String EXP_DATA_FILE_NAME =
27              "/xml/flatXmlDataSetTestChanged.xml";
28  
29      private static final VerifyTableDefinition TEST_TABLE =
30              makeVerifyTableDefinition("TEST_TABLE");
31      private static final VerifyTableDefinition SECOND_TABLE =
32              makeVerifyTableDefinition("SECOND_TABLE");
33      private static final VerifyTableDefinition EMPTY_TABLE =
34              makeVerifyTableDefinition("EMPTY_TABLE");
35      private static final VerifyTableDefinition PK_TABLE =
36              makeVerifyTableDefinition("PK_TABLE");
37      private static final VerifyTableDefinition ONLY_PK_TABLE =
38              makeVerifyTableDefinition("ONLY_PK_TABLE");
39      private static final VerifyTableDefinition EMPTY_MULTITYPE_TABLE =
40              makeVerifyTableDefinition("EMPTY_MULTITYPE_TABLE");
41  
42      private final DataFileLoader dataFileLoader = new FlatXmlDataFileLoader();
43  
44      private static VerifyTableDefinition makeVerifyTableDefinition(
45              final String tableName)
46      {
47          return new VerifyTableDefinition(tableName, new String[] {});
48      }
49  
50      @Override
51      @BeforeEach
52      protected void setUp() throws Exception
53      {
54          setDataFileLoader(dataFileLoader);
55  
56          // don't call super.setUp() here as prep data is not loaded yet
57          // (getDataSet() is null)
58          // super.setUp();
59      }
60  
61      @Test
62      void testSuccessRun_withMatchingPrepAndExpectedFiles_doesNotThrowException() throws Exception
63      {
64          final String[] prepDataFiles = {PREP_DATA_FILE_NAME};
65          final String[] expectedDataFiles = {PREP_DATA_FILE_NAME};
66          final VerifyTableDefinition[] tables = {TEST_TABLE, SECOND_TABLE,
67                  EMPTY_TABLE, PK_TABLE, ONLY_PK_TABLE, EMPTY_MULTITYPE_TABLE};
68  
69          final IDatabaseTester databaseTester = makeDatabaseTester();
70          setDatabaseTester(databaseTester);
71  
72          configureTest(tables, prepDataFiles, expectedDataFiles);
73  
74          // reopen connection as configureTest() closes its own after
75          // obtaining the case-sensitivity feature setting; preTest() and
76          // postTest() then share and close this one connection themselves
77          // instead of each needing a fresh one (#800)
78          final IDatabaseTester databaseTesterNew1 = makeDatabaseTester();
79          setDatabaseTester(databaseTesterNew1);
80          assertDoesNotThrow(() -> preTest(),
81                  "Did not expect tc.postTest() to throw, but it did!");
82  
83          // skip modifying data and just verify the insert
84  
85          postTest();
86      }
87  
88      @Test
89      void testFailRun_withMismatchedExpectedFile_throwsDbComparisonFailure() throws Exception
90      {
91          final String[] prepDataFiles = {PREP_DATA_FILE_NAME};
92          final String[] expectedDataFiles = {EXP_DATA_FILE_NAME};
93          final VerifyTableDefinition[] tables = {TEST_TABLE, SECOND_TABLE,
94                  EMPTY_TABLE, PK_TABLE, ONLY_PK_TABLE, EMPTY_MULTITYPE_TABLE};
95  
96          final IDatabaseTester databaseTester = makeDatabaseTester();
97          setDatabaseTester(databaseTester);
98  
99          configureTest(tables, prepDataFiles, expectedDataFiles);
100 
101         // reopen connection as configureTest() closes its own after
102         // obtaining the case-sensitivity feature setting; preTest() and
103         // postTest() then share and close this one connection themselves
104         // instead of each needing a fresh one (#800)
105         final IDatabaseTester databaseTesterNew1 = makeDatabaseTester();
106         setDatabaseTester(databaseTesterNew1);
107 
108         preTest();
109 
110         // skip modifying data and just verify the insert
111 
112         assertThrows(DbComparisonFailure.class, () -> postTest(),
113                 "Expected tc.postTest() to throw DbComparisonFailure, but it didn't");
114 
115     }
116 
117     protected IDatabaseTester makeDatabaseTester() throws Exception
118     {
119         final DatabaseEnvironment dbEnv = DatabaseEnvironment.getInstance();
120         final IDatabaseConnection connection = dbEnv.getConnection();
121         final IDatabaseTester databaseTester = new DefaultDatabaseTester(connection);
122         // without this, the prep rows this test inserts are never cleaned up and leak
123         // into whatever test runs next against the same tables
124         databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
125         return databaseTester;
126     }
127 }