gpt4 book ai didi

java - SpringJUnit4ClassRunner 应该初始化它的上下文多少次?

转载 作者:行者123 更新时间:2023-12-02 04:27:33 26 4
gpt4 key购买 nike

said in manual ,那个

The Test annotation tells JUnit that the public void method to which it is attached can be run as a test case. To run the method, JUnit first constructs a fresh instance of the class then invokes the annotated method. Any exceptions thrown by the test will be reported by JUnit as a failure. If no exceptions are thrown, the test is assumed to have succeeded.

这可能意味着,对于每个 @Test 方法,应该再次初始化上下文。这个答案也证实了这一点:https://stackoverflow.com/a/1564309/258483

同时,我在实验中看到了相反的情况:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringJUnit4ClassRunnerDemo._Config.class)
public class SpringJUnit4ClassRunnerDemo {


public static class Bean1 {
{
System.out.println("Bean1 constructor called");
}
}

public static class Bean2 {

{
System.out.println("Bean2 constructor called");
}

private Bean1 bean1;

public Bean1 getBean1() {
return bean1;
}

@Autowired
public void setBean1(Bean1 bean1) {
this.bean1 = bean1;

System.out.println("Bean2.bean1 property set");
}
}

@Configuration
public static class _Config {

@Bean
public Bean1 bean1() {
return new Bean1();
}

@Bean
public Bean2 bean2() {
return new Bean2();
}


}

@Autowired
private Bean1 bean1;

@Autowired
private Bean2 bean2;


@Test
public void testBean1() {

assertNotNull(bean1);

System.out.println("testBean1() done");
}

@Test
public void testBean2() {

assertNotNull(bean2);

assertSame(bean2.getBean1(), bean1);

System.out.println("testBean2() done");
}


}

此代码输出

Bean1 constructor called
Bean2 constructor called
Bean2.bean1 property set
testBean1() done
testBean2() done

这可能意味着,在第二次测试之前,该上下文没有第二次初始化。

什么是实际且正确的行为以及如何控制它?

最佳答案

如果您希望在测试方法之间重新加载 Spring 上下文,则需要使用 @DirtiesContext 注解:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/annotation/DirtiesContext.html

关于java - SpringJUnit4ClassRunner 应该初始化它的上下文多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31937008/

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