22

依存性注入 (Spring 自動配線) と maven-surefire に問題があります。次のテストは、TestNG を使用して Eclipse で実行すると問題なく機能します。サービス オブジェクトが注入され、次に@BeforeClassメソッドが呼び出されます。

@TransactionConfiguration(defaultRollback=false)
@ContextConfiguration(locations={"/testContext.xml"})
public class MyServiceTest extends AbstractTransactionalTestNGSpringContextTests {


@Autowired
private MyService service;

@BeforeTest
public void setup() {
    System.out.println("*********************"+service);
    Assert.assertNotNull(service);
}

ただし、maven-surefire でまったく同じテストケースを実行すると、最初に setup() が呼び出され、テストが失敗します。

[INFO] --- maven-surefire-plugin:2.7.2:test (default-test) @ myserver ---
[INFO] Surefire report directory: D:\...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite
**************************null
2011-03-04 11:08:57,462 DEBUG  ionTestExecutionListener.prepareTestInstance  - Performing dependency injection for test context [[TestContext@1fd6bea...
2011-03-04 11:08:57,462 DEBUG  ractGenericContextLoader.loadContext          - Loading ApplicationContext for locations [classpath:/testContext.xml].

どうすればこの問題を解決できますか? 置き換える@BeforeClass@Test、TestNG の Eclipse プラグインのように Maven で動作します。

maven-surefire-plugin:2.7.2

Eclipse: ヘリオス サービス リリース 1

jdk1.6.0_14

テストNG: 5.14.10

4

5 に答える 5

24

さらに、この問題が修正されるまで、以前のアドバイスに従ってもまだうまくいかない場合、またはすべてのメソッドの前にコードを実行したくない場合は、次のコードをテスト クラスに追加します。

@Override
@BeforeSuite
protected void springTestContextPrepareTestInstance() throws Exception {
    super.springTestContextPrepareTestInstance();
}

これにより、 @BeforeClass メソッドが実行される前に Spring コンテキストが準備されます。

*注、サンプルコードで @BeforeClass を使用していないにもかかわらず、タイトルで @BeforeClass について質問しているため、この回答を投稿しました。

于 2011-05-08T18:00:19.670 に答える
12

@BeforeMethodではなく、使用してください@BeforeTest

于 2011-03-04T17:48:35.250 に答える
7

Spring の依存性注入はメソッド内で発生するため、 Cedric: use @BeforeMethodinstead ofに同意します。@BeforeTest@BeforeClass

  • Sam (Spring TestContext フレームワークの作成者 ;) )
于 2011-03-09T17:31:39.340 に答える
1

@BeforeXXX ではなく @PostConstruct を使用する

于 2014-03-04T11:21:53.777 に答える