web-dev-qa-db-ja.com

TestNGを使用したSpring依存性注入

Springはその上でJUnitを非常によくサポートしています:RunWithおよびContextConfigurationアノテーションを使用すると、非常に直感的に見えます

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

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

54
56
lexicore

ここに私のために働いた例があります:

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!
    }
}
25
Arup Malakar

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

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

  • BeforeSuite
  • BeforeTest
  • BeforeClass
  • BeforeMethod

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

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

これにより、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!
    }
}
18
romeara