问题描述
我有2个课程:
public class DBUnitConfig extends DBTestCase {
protected IDatabaseTester tester;
private Properties properties;
protected IDataSet beforeData;
@Before
public void setUp() throws Exception {
tester = new JdbcDatabaseTester(properties.getProperty("driver"),properties.getProperty("url"),properties.getProperty("username"),properties.getProperty("password"));
}
public DBUnitConfig(String name) {
super(name);
properties = new Properties();
try {
properties.load(Thread.currentThread()
.getContextClassLoader().getResourceAsstream("config.properties"));
} catch (IOException e) {
e.printstacktrace();
}
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS,properties.getProperty("driver"));
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL,properties.getProperty("url"));
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME,properties.getProperty("username"));
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD,properties.getProperty("password"));
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA,"");
}
@Override
protected IDataSet getDataSet() throws Exception {
return beforeData;
}
@Override
protected DatabaSEOperation getTearDownoperation() throws Exception {
return DatabaSEOperation.DELETE_ALL;
}
}
和
class CourseDAOTest extends DBUnitConfig {
private CourseDao courseDao = new CourseDao();
public CourseDAOTest(String name) {
super(name);
}
@BeforeEach
public void setUp() throws Exception {
super.setUp();
String file = getClass().getClassLoader().getResource("preparedDataset.xml").getFile();
beforeData = new FlatXmlDataSetBuilder().build(new File(file));
tester.setDataSet(beforeData);
tester.onSetup();
}
@Test
void testGetAll() throws Exception {
List<Course> persons = courseDao.getAll();
String file = getClass().getClassLoader().getResource("CourseDao/getAll.xml").getFile();
IDataSet expectedData = new FlatXmlDataSetBuilder().build(new File(file));
IDataSet actualData = tester.getConnection().createDataSet();
Assertion.assertEquals(expectedData,actualData);
Assert.assertEquals(expectedData.getTable("person").getRowCount(),persons.size());
}
}
运行测试时出现错误:
org.junit.jupiter.api.extension.ParameterResolutionException:没有在构造函数[public com.foxminded.school.dao.CourseDAOTest(java.lang.String)]中为参数[java.lang.String arg0]注册ParameterResolver。
也许问题是我采用了Junit4编写的代码,但是我正在使用第五个代码?
解决方法
问题是JUnit无法实例化CourseDAOTest,因为它不知道作为“名称”构造函数参数要传递的内容。 JUnit需要一个无参数的构造函数来实例化该类并运行测试方法。