Springはその上でJUnitを非常によくサポートしています:RunWith
およびContextConfiguration
アノテーションを使用すると、非常に直感的に見えます
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:dao-context.xml")
このテストは、EclipseとMavenの両方で正しく実行できます。 TestNGに似たようなものがあるのだろうか。この「次世代」フレームワークへの移行を検討していますが、Springでのテストに適したものが見つかりませんでした。
TestNGでも機能します。 testクラスは、extendのいずれかが必要です次のクラス:
ここに私のために働いた例があります:
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!
}
}
SpringとTestNGはうまく連携しますが、注意すべき点がいくつかあります。 AbstractTestNGSpringContextTestsをサブクラス化することとは別に、標準TestNGセットアップ/ティアダウンアノテーションと相互作用する方法を認識する必要があります。
TestNGには4つのレベルのセットアップがあります
予想どおりに発生します(自己文書化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!
}
}