62

RunWithSpring はその点でJUnit を非常にうまくサポートしていますContextConfiguration

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:dao-context.xml")

このテストは、Eclipse と Maven の両方で正しく実行できます。TestNGにも同様のものがあるのだろうか。この「次世代」フレームワークへの移行を検討していますが、Spring でテストするのに一致するものが見つかりませんでした。

4

3 に答える 3

62

TestNG でも動作します。テストクラスは、次のいずれかのクラスを拡張する必要があります。

于 2010-04-09T15:14:03.017 に答える
30

これが私のために働いた例です:

import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;

@Test
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestValidation extends AbstractTestNGSpringContextTests {

    public void testNullParamValidation() {
        // Testing code goes here!
    }
}
于 2012-04-02T16:59:00.440 に答える
22

Spring と TestNG はうまく連携しますが、注意すべき点がいくつかあります。サブクラス化は別AbstractTestNGSpringContextTestsとして、それが標準の TestNG セットアップ/ティアダウン アノテーションとどのように相互作用するかを認識する必要があります。

TestNG には 4 つのレベルのセットアップがあります

  • 前スイート
  • テスト前
  • 授業前
  • Beforeメソッド

これはまさに期待どおりに発生します (自己文書化 API の好例)。dependsOnMethodsこれらはすべて、同じレベルのメソッドの名前である String または String[] を取ることができるというオプションの値を持っています。

このAbstractTestNGSpringContextTestsクラスには、BeforeClassと呼ばれる注釈付きのメソッドspringTestContextPrepareTestInstanceがあり、自動配線されたクラスを使用している場合は、依存するようにセットアップ メソッドを設定する必要があります。メソッドの場合、クラスメソッドの前にテストクラスがセットアップされているときに発生するため、オートワイヤリングについて心配する必要はありません。

これにより、 で注釈が付けられたメソッドで自動配線されたクラスをどのように使用するかという問題が残りますBeforeSuite。手動で呼び出すことでこれを行うことができますspringTestContextPrepareTestInstance- デフォルトではこれを行うように設定されていませんが、私は何度か成功しました。

したがって、説明のために、Arup の例の修正版を以下に示します。

import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;

@Test
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestValidation extends AbstractTestNGSpringContextTests {

    @Autowired
    private IAutowiredService autowiredService;

    @BeforeClass(dependsOnMethods={"springTestContextPrepareTestInstance"})
    public void setupParamValidation(){
        // Test class setup code with autowired classes goes here
    }

    @Test
    public void testNullParamValidation() {
        // Testing code goes here!
    }
}
于 2013-05-10T02:55:12.360 に答える