gpt4 book ai didi

java - Spring @Autowired 在 Maven Surefire 插件中生成线程时返回 null

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:16 25 4
gpt4 key购买 nike

我正在使用 Spring 和 Maven 编写 Junit 测试用例。我想并行运行 Junit 测试用例,为此我使用了 Maven Surefire 插件并行属性。该属性正在按需要运行。但在我的测试用例中,@Autowired 为第二个线程返回 null。

pom.xml

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<parallel>methods</parallel>
<threadCount>5</threadCount>
</configuration>

Class1.java

@Component
@Scope("prototype")
public class Class1 {
public void setParam(String s) {}
}

Class2.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { ApplicationConfiguration.class }, loader = AnnotationConfigContextLoader.class)
public class Class2 {
@Autowired
Class1 class1;

@Before
public void setInitialValue(){
class1.setParam("test");
}

@Test
public void run1() {
}

@Test
public void run2() {}
}

在此代码中,run1run2 方法被并行调用,但当线程 2 运行时,Class2 中的 class1 对象的 setInitialValue() 方法抛出 NullPointerException

最佳答案

可能有点晚了,但仍然如此。当使用parallel=methods时,JUnit为每个测试类仅创建一个Runner实例,该实例由多个线程使用。

当使用parallel=classes时,JUnit 会为每个线程创建一个带有专用 TestContextManager 的运行器,这应该可以解决问题。

关于java - Spring @Autowired 在 Maven Surefire 插件中生成线程时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com