我不熟悉unitils(内置dbunit)和spring。在我正在工作的新地方我可以看到一些测试是使用spring而其他测试是使用unitils / dbunit而没有spring。
推动使用弹簧,所以我一直试图合并以下功能。
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
问题是我在使用spring版本时无法将我的课程统一起来,因为它们都是JUnit4ClassRunner扩展。
我尝试了各种各样的变化,但一直无法工作。
任何人都可以建议这样做吗?
由于
答案 0 :(得分:4)
Unitils实际上没有适当的Spring集成支持。
请改为查看spring-test-dbunit。
答案 1 :(得分:3)
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文件中解决了这个问题。