首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Spring一起使用dbunit的问题(没有spring-test-dbunit)

与Spring一起使用dbunit的问题(没有spring-test-dbunit)
EN

Stack Overflow用户
提问于 2018-02-28 11:35:38
回答 1查看 286关注 0票数 2

我在试着用dbunit测试我的DAOs。我们在与不兼容的版本中使用Spring。我不能将我的道bean自动放入我的测试类中,因为那样的话,我必须使用@RunWith(SpringJUnit4ClassRunner.class),它将一个无参数构造函数。我的课看上去如下:

代码语言:javascript
复制
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"-constructor。是否有一种标准的方法或解决方法可以不使用spring-test-dbunit而使用dbunit和spring?

编辑

我的课程现在看起来如下:

代码语言:javascript
复制
@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);
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-04 04:02:21

由于您正在使用Spring,所以我建议将dbUnit实例自动放入测试中。dbUnit测试用例页PrepAndExpectedTestCase提供了“使用Spring的配置示例”,但只需复制代码并将其更改为DBTestCase并进行相应的调整。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49028640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档