1

私はユニティル(dbunitに組み込まれている)と春が初めてです。私が働いている新しい場所では、テストの一部は春であり、他のテストは春なしで unitils/dbunit を使用していることがわかります。

スプリングを使用するプッシュがあるため、次の機能をマージしようとしています。

以下を使用した春のテスト:

@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"));
}

このクラスには @RunWith(SpringJUnit4ClassRunner.class ) を使用するときに機能する @Autowired ProfileDao があります。

以下を使用した Unitils テスト:

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

実行時にデータベースなどを正しくロードします。

私が達成しようとしているのは、これらを組み合わせて、 @RunWith(UnitilsJUnit4TestClassRunner.class) アノテーションを使用してクラスを「ユニット化」できるようにすることですが、前のクラスと同様に通常の方法でスプリングを利用することもできます。

問題は、両方とも JUnit4ClassRunner 拡張機能であるため、Spring バージョンを使用しているときにクラスをユニット化できないように見えることです。

さまざまなバリエーションを試しましたが、機能させることができませんでした。

誰でもこれを行うための適切な方法についてアドバイスできますか?

ありがとう

4

2 に答える 2

4

Unitils には、実際には適切な Spring 統合サポートがありません。

代わりにspring-test-dbunit をご覧ください。

于 2013-02-03T21:32:19.183 に答える
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 ファイルで問題を回避しました。

于 2013-04-29T14:14:16.163 に答える