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          assertDoesNotThrow(() -> preTest(),
75                  "Did not expect tc.postTest() to throw, but it did!");
76  
77          // skip modifying data and just verify the insert
78  
79          postTest();
80      }
81  
82      @Test
83      void testFailRun_withMismatchedExpectedFile_throwsDbComparisonFailure() throws Exception
84      {
85          final String[] prepDataFiles = {PREP_DATA_FILE_NAME};
86          final String[] expectedDataFiles = {EXP_DATA_FILE_NAME};
87          final VerifyTableDefinition[] tables = {TEST_TABLE, SECOND_TABLE,
88                  EMPTY_TABLE, PK_TABLE, ONLY_PK_TABLE, EMPTY_MULTITYPE_TABLE};
89  
90          final IDatabaseTester databaseTester = makeDatabaseTester();
91          setDatabaseTester(databaseTester);
92  
93          configureTest(tables, prepDataFiles, expectedDataFiles);
94  
95          preTest();
96  
97          // skip modifying data and just verify the insert
98  
99          assertThrows(DbComparisonFailure.class, () -> postTest(),
100                 "Expected tc.postTest() to throw DbComparisonFailure, but it didn't");
101 
102     }
103 
104     protected IDatabaseTester makeDatabaseTester() throws Exception
105     {
106         final DatabaseEnvironment dbEnv = DatabaseEnvironment.getInstance();
107         final IDatabaseConnection connection = dbEnv.getConnection();
108         final IDatabaseTester databaseTester = new DefaultDatabaseTester(connection);
109         // without this, the prep rows this test inserts are never cleaned up and leak
110         // into whatever test runs next against the same tables
111         databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
112         return databaseTester;
113     }
114 }