BaseTest_junit4.java
4.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.bsth;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.util.StatusPrinter;
import org.apache.commons.lang3.StringUtils;
import org.dbunit.database.DatabaseConfig;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.DatabaseSequenceFilter;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.FilteredDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.ext.h2.H2DataTypeFactory;
import org.dbunit.operation.DatabaseOperation;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.rules.TestName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import javax.sql.DataSource;
import java.io.File;
import java.util.Map;
/**
* junit4基础测试类。
*/
public abstract class BaseTest_junit4 {
/** 日志记录器 */
public static final Logger LOG = LoggerFactory.getLogger(BaseTest_junit4.class);
@Rule
public TestName name = new TestName();
@BeforeClass
public static void initLogConfig() throws Exception {
File logFile = new File(BaseTest_junit4.class.getResource("/logback.xml").toURI());
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
lc.reset();
configurator.doConfigure(logFile);
StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
}
/**
* 获取DBUnit数据源。
* @return
*/
private IDataSet getDataSet() throws Exception {
Map<String, String> dbFileMap = getDbunitTestDbFileClassPathMap();
String methodName = name.getMethodName();
String dbunitClassPath = dbFileMap.get(methodName);
if (StringUtils.isEmpty(dbunitClassPath)) {
LOG.info("dbunit测试xml为空,key={}", methodName);
}
Resource res = new ClassPathResource(dbunitClassPath);
FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder();
builder.setColumnSensing(true);
return builder.build(res.getInputStream());
}
/**
* 获取数据库连接。
* @return
*/
private IDatabaseConnection getConnection() throws Exception {
DatabaseConnection conn = new DatabaseConnection(getDataSource().getConnection());
DatabaseConfig config = conn.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new H2DataTypeFactory());
return conn;
}
/**
* 初始化数据。
* @throws Exception
*/
@Before
public void initDbunitDataSet() throws Exception {
LOG.info("junit setup:dbunit-载入测试数据!===>");
IDatabaseConnection connection = getConnection();
DatabaseOperation.CLEAN_INSERT.execute(connection, getDataSet());
connection.close();
}
/**
* 销毁测试数据。
* @throws Exception
*/
@After
public void afterDbunitDataSet() throws Exception {
LOG.info("===>junit teardown:dbunit-销毁测试数据!");
IDatabaseConnection connection = getConnection();
// 使用FilteredDataSet重新定义数据库,否则删除的时候会发生外健依赖错误
// 因为默认删除是按照表名字母顺序删除的,如果外健关联的表先删除,则发生外健约束错误
IDataSet fullDataSet = new FilteredDataSet(new DatabaseSequenceFilter(connection), connection.createDataSet());
DatabaseOperation.DELETE_ALL.execute(connection, fullDataSet);
connection.close();
}
@Autowired
private DataSource dataSource;
/**
* 获取数据源。
* @return
*/
public DataSource getDataSource() {
return dataSource;
}
/**
* 获取Dbunit测试数据文件xml映射,key=测试方法名,value=dbunit测试文件classpath
* key:子类testCase方法名
* value:dbunit数据文件classpath(如:db/testdata/dbunit_testdata1.xml)
* @return
*/
public abstract Map<String, String> getDbunitTestDbFileClassPathMap();
}