Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringJUnit4ClassRunner应该初始化多少次';什么是背景?_Java_Spring_Unit Testing_Junit - Fatal编程技术网

Java SpringJUnit4ClassRunner应该初始化多少次';什么是背景?

Java SpringJUnit4ClassRunner应该初始化多少次';什么是背景?,java,spring,unit-testing,junit,Java,Spring,Unit Testing,Junit,是,那 测试注释告诉JUnit公共void方法 它是附加的,可以作为测试用例运行。要运行该方法,请使用JUnit 首先构造类的新实例,然后调用 带注释的方法。将报告测试引发的任何异常 被JUnit视为失败。如果没有抛出异常,则测试将被取消 被认为已经成功了 这可能意味着,对于每个@Test方法,应该再次初始化上下文。这个答案也证实了这一点: 同时,我在实验中看到了相反的结果: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguratio

是,那

测试注释告诉JUnit公共void方法 它是附加的,可以作为测试用例运行。要运行该方法,请使用JUnit 首先构造类的新实例,然后调用 带注释的方法。将报告测试引发的任何异常 被JUnit视为失败。如果没有抛出异常,则测试将被取消 被认为已经成功了

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

同时,我在实验中看到了相反的结果:

@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
注释:

您的理解是错误的,并且您阅读的文档是错误的。Spring测试上下文框架只负责加载一次上下文,这是出于性能原因,因为加载上下文通常相当耗时。如果确实要重新加载上下文,请将
@DirtiesContext
添加到测试方法或测试类中。