【问题标题】:unit testing with unitils, dbunit and spring使用 unitils、dbunit 和 spring 进行单元测试
【发布时间】:2012-12-20 04:34:25
【问题描述】:

我是 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) 注释“Unitil'ise”我的课程,但也可以像上一个课程一样以正常方式使用 spring .

问题是我在使用 spring 版本时似乎无法统一我的课程,因为它们都是 JUnit4ClassRunner 扩展。

我尝试了多种变体,但都无法奏效。

任何人都可以建议一种体面的方法吗?

谢谢

【问题讨论】:

    标签: spring junit unitils


    【解决方案1】:

    Unitils 并没有真正提供适当的 Spring 集成支持。

    改为查看spring-test-dbunit

    【讨论】:

    • +1, Unitils 现在似乎被抛弃了。此外还有spring-dbunit 的替代方案。两者似乎都提供相同的功能。
    【解决方案2】:

    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 文件中解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 2010-09-26
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多