构造函数中没有为参数[java.lang.String arg0]注册ParameterResolver

问题描述

我有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需要一个无参数的构造函数来实例化该类并运行测试方法。