22

我在依赖注入(Spring 自动装配)和 maven-surefire 方面遇到了一些问题。以下测试在 Eclipse 中使用 TestNG 运行时没有问题: 注入服务对象,然后@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它可以在 Maven 中工作,就像在 TestNG 的 eclipse 插件中一样。

maven-surefire-插件:2.7.2

Eclipse:Helios 服务版本 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

我同意 Cedric:使用@BeforeMethod而不是@BeforeTest,因为 Spring 的依赖注入发生在@BeforeClass方法中。

  • Sam(Spring TestContext 框架的作者;))
于 2011-03-09T17:31:39.340 回答
1

使用@PostConstruct 而不是@BeforeXXX

于 2014-03-04T11:21:53.777 回答
0

检查您是否也有 spring-asm 依赖项。如果你有一个,它将与 spring-core 依赖冲突。我删除了 asm 依赖项,这对我有用。

于 2015-04-21T21:35:08.513 回答