簡體   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