JUnitで(Springコンテキストで)テストを作成するとき、私は通常次のようにします。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:testContext.xml")
public class SimpleTest {
@Test
public void testMethod() {
// execute test logic...
}
}
TestNGで同じことをするにはどうすればよいですか?
詳細を追加します。 AbstractTestNGSpringContextTestsを使用すると機能しますが、私が望む方法では機能しません。私はいくつかのテストをしています...
@ContextConfiguration(locations = { "classpath:applicationContextForTests.xml" })
public class ExampleTest extends AbstractTestNGSpringContextTests {
private Boolean someField;
@Autowired
private Boolean someBoolean;
@Test
public void testMethod() {
System.out.println(someField);
Assert.assertTrue(someField);
}
@Test
public void testMethodWithInjected() {
System.out.println(someBoolean);
Assert.assertTrue(someBoolean);
}
// setters&getters
}
および記述子.。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="exampleTest" class="pl.michalmech.ExampleTest">
<property name="someField">
<ref bean="someBoolean"/>
</property>
</bean>
<bean id="someBoolean" class="Java.lang.Boolean">
<constructor-arg type="Java.lang.String" value="true"/>
</bean>
</beans>
結果は...
null
true
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.599 sec <<< FAILURE!
Results :
Failed tests:
testMethod(pl.michalmech.ExampleTest)
だから私はrunnerについて尋ねました。
正解です。TestNGは常にTestクラスをインスタンス化します(検証するためにコンストラクターにブレークポイントを設定します)。後で(@BeforeClass)、コンテキストからのBeanがTestクラスに注入されます。
ただし、そもそもなぜテストをBeanと定義するのか興味があります。 Springを使用してから10年間、これを行う必要はありませんでした。
TestNGは、Springを使用してテストをインスタンス化しません。そのため、someField = null