繁体   English   中英

使用unitils,dbunit和spring进行单元测试

[英]unit testing with unitils, dbunit and spring

我是unitils(内置于dbunit中)和spring的新手。 在新工作的地方,我可以看到一些测试是通过spring进行的,而另一些测试是在不使用spring的情况下使用unitils / dbunit进行的。

有一个使用spring的推动,所以我一直在尝试合并以下功能。

春季测试使用:

@RunWith(SpringJUnit4ClassRunner.class )
@ContextConfiguration(locations = { "classpath:spring-dev.xml" })
public class x(){
@Autowired
private ProfileDao profileDao;

@Test
@Rollback
@Transactional
public void shouldRetrieveProfileByUserNumber() {
    Profile profile = profileDao.retrieveProfile("u1", "0000003861", null);
    assertThat(profile.getUserNumber(), is("0000003861"));
}

此类具有@Autowired ProfileDao,在使用@RunWith(SpringJUnit4ClassRunner.class)时可以使用。

Unitils测试使用:

@RunWith(UnitilsJUnit4TestClassRunner.class)
@DataSet("WEB_SERVICE_DATASET.xml")
public class ServiceExceptionTest {}

运行时正确加载数据库等。

我想要实现的是将这些结合起来,以便可以将我的类与@RunWith(UnitilsJUnit4TestClassRunner.class)注释“统一”,但也可以像上一类一样以正常方式使用spring。

问题是在使用春季版本时,我似乎无法统一我的班级,因为它们都是JUnit4ClassRunner扩展。

我尝试了各种变体,但没有任何作用。

有人可以建议这样做的体面方法吗?

谢谢

Unitils确实没有适当的Spring集成支持。

请改为查看spring-test-dbunit

Unitils有一个Spring集成包:

org.unitils:unitils-spring:3.3

我们不必从Spring测试中迁移,但可以将Spring和Unitils一起使用。 我们不是使用@RunWith批注,而是将其子类化:

import org.unitils.UnitilsJUnit4;
import org.unitils.dbunit.annotation.DataSet;
import org.unitils.spring.annotation.SpringBean;
import org.unitils.spring.annotation.SpringApplicationContext;

@SpringApplicationContext({"main-context.xml", "test-context.xml"})
@DataSet
public class ServiceTest extends UnitilsJUnit4 {

  @SpringBean("ourServiceBean")
  OurService ourService;

  @Test
  public void someTest() throws Exception {
  }
}

最近,我们遇到了一个问题,即我们的测试数据第一次没有正确加载。 这可能是Unitils和Spring事务处理之间的冲突。 我不确定,但是可以通过设置以下属性来关闭Unitils中的事务:

DatabaseModule.Transactional.value.default=disabled

在unitils.properties文件中解决了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM