将 dbunit 与 Spring 一起使用时出现问题(没有 spring-test-dbunit)



我正在尝试使用dbunit来测试我的DAO。我们使用 Spring 的版本与 spring-test-dbunit 不兼容。我无法将我的 dao bean 自动连接到我的测试类中,因为那样我将不得不使用@RunWith(SpringJUnit4ClassRunner.class)它涉及一个无参数构造函数。我的类如下所示:

public class DbUnitExample extends DBTestCase {
@Autowired
public MyDAO myDAO;

public DbUnitExample(String name) {
super(name);
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.mysql.jdbc.Driver");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "...");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "...");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "...");
}
@Override
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSetBuilder().build(new FileInputStream("target/partial.xml"));
}
@Override
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.REFRESH;
}
@Override
protected DatabaseOperation getTearDownOperation() throws Exception {
return DatabaseOperation.NONE;
}
@Test
public void testSometing() throws Exception {
myDAO.deleteById(12662);
}
}

当然,我得到一个NPE,因为我的道豆找不到。当我使用@RunWith(SpringJUnit4ClassRunner.class)时,我需要提供一个无参数构造函数,并且必须删除我的"dbunit"构造函数。是否有标准方法或解决方法可以在不使用 spring-test-dbunit 的情况下将 dbunit 与 spring 一起使用

编辑

我的类现在如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/test-application.xml")
@DirtiesContext
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class })
public class DbUnitExample extends DBTestCase {
@Autowired
public MyDAO myDAO;
public DbUnitExample() {
super("target/partial.xml");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.mysql.jdbc.Driver");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "...");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "...");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "...");
}
@Override
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSetBuilder().build(new FileInputStream("target/partial.xml"));
}
@Override
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.REFRESH;
}
@Override
protected DatabaseOperation getTearDownOperation() throws Exception {
//      return DatabaseOperation.NONE;
//      return DatabaseOperation.REFRESH;
return DatabaseOperation.CLEAN_INSERT;
}
@Test
public void testSometing() throws Exception {
myDAO.deleteById(12662);
}
}

它现在可以编译,但没有 dbunt 功能,这意味着如果我删除一行,它不会恢复到以前的状态(再次插入)。

由于您使用的是 Spring,因此我建议将 dbUnit 实例自动连接到测试中。 dbUnit 测试用例页面有PrepAndExpectedTestCase的"使用 Spring 的配置示例",但只需复制代码并将其更改为DBTestCase并相应地进行调整。

相关内容

  • 没有找到相关文章

最新更新