1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.dbunit;
23
24
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 import junit.framework.TestCase;
29
30 import org.dbunit.database.DatabaseConfig;
31 import org.dbunit.database.IDatabaseConnection;
32 import org.dbunit.dataset.IDataSet;
33 import org.dbunit.operation.DatabaseOperation;
34
35
36
37
38
39
40
41
42
43
44
45 public abstract class DatabaseTestCase extends TestCase
46 {
47
48
49
50
51 private static final Logger logger = LoggerFactory.getLogger(DatabaseTestCase.class);
52
53 private IDatabaseTester tester;
54
55 private IOperationListener operationListener;
56
57 public DatabaseTestCase()
58 {
59 }
60
61 public DatabaseTestCase(String name)
62 {
63 super(name);
64 }
65
66
67
68
69 protected abstract IDatabaseConnection getConnection() throws Exception;
70
71
72
73
74 protected abstract IDataSet getDataSet() throws Exception;
75
76
77
78
79
80
81
82 protected IDatabaseTester newDatabaseTester() throws Exception{
83 logger.debug("newDatabaseTester() - start");
84
85 final IDatabaseConnection connection = getConnection();
86 getOperationListener().connectionRetrieved(connection);
87 final IDatabaseTester tester = new DefaultDatabaseTester(connection);
88 return tester;
89 }
90
91
92
93
94
95
96 protected void setUpDatabaseConfig(DatabaseConfig config)
97 {
98
99 }
100
101
102
103
104
105
106
107 protected IDatabaseTester getDatabaseTester() throws Exception {
108 if ( this.tester == null ) {
109 this.tester = newDatabaseTester();
110 }
111 return this.tester;
112 }
113
114
115
116
117
118
119 protected void closeConnection(IDatabaseConnection connection) throws Exception
120 {
121 logger.debug("closeConnection(connection={}) - start", connection);
122
123 assertNotNull( "DatabaseTester is not set", getDatabaseTester() );
124 getDatabaseTester().closeConnection( connection );
125 }
126
127
128
129
130 protected DatabaseOperation getSetUpOperation() throws Exception
131 {
132 return DatabaseOperation.CLEAN_INSERT;
133 }
134
135
136
137
138 protected DatabaseOperation getTearDownOperation() throws Exception
139 {
140 return DatabaseOperation.NONE;
141 }
142
143
144
145
146 protected void setUp() throws Exception
147 {
148 logger.debug("setUp() - start");
149
150 super.setUp();
151 final IDatabaseTester databaseTester = getDatabaseTester();
152 assertNotNull( "DatabaseTester is not set", databaseTester );
153 databaseTester.setSetUpOperation( getSetUpOperation() );
154 databaseTester.setDataSet( getDataSet() );
155 databaseTester.setOperationListener(getOperationListener());
156 databaseTester.onSetup();
157 }
158
159 protected void tearDown() throws Exception
160 {
161 logger.debug("tearDown() - start");
162
163 try {
164 final IDatabaseTester databaseTester = getDatabaseTester();
165 assertNotNull( "DatabaseTester is not set", databaseTester );
166 databaseTester.setTearDownOperation( getTearDownOperation() );
167 databaseTester.setDataSet( getDataSet() );
168 databaseTester.setOperationListener(getOperationListener());
169 databaseTester.onTearDown();
170 } finally {
171 tester = null;
172 super.tearDown();
173 }
174 }
175
176
177
178
179
180 protected IOperationListener getOperationListener()
181 {
182 logger.debug("getOperationListener() - start");
183 if(this.operationListener==null){
184 this.operationListener = new DefaultOperationListener(){
185 public void connectionRetrieved(IDatabaseConnection connection) {
186 super.connectionRetrieved(connection);
187
188
189 setUpDatabaseConfig(connection.getConfig());
190 }
191 };
192 }
193 return this.operationListener;
194 }
195 }