如何在使用@RunWith(SpringJUnit4ClassRunner.class)执行任何测试之前在Junit类中自动装配属性

时间:2015-08-08 20:55:45

标签: java spring junit

我在使用Before Class注释执行任何junit测试之前尝试执行一个代码(我在其中自动拧一个属性)但是这里的问题是在应用程序上下文加载之前调用的带注释的方法由于这个我得到了null值property(helloWorld)。

请参阅相同的代码

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/SpringBeans.xml")
public class JunitTest {

    @Autowired
    private static HelloWorld helloWorld;

    @BeforeClass
    public static void methodBefore(){
        helloWorld.printHello();
        System.out.println("Before Class");
    }


    @Test
    public void method1(){
        System.out.println("In method 1");
    }

    @Test
    public void method2(){
        System.out.println("In method 2");
    }

    @Test
    public void method3(){
        System.out.println("In method 3");
    }

    @Test
    public void method4(){
        System.out.println("In method 4");
    }


    @AfterClass
    public static void methodAfter(){
        System.out.println("After Class");
    }

}

以同样的方式,我想在执行所有junit测试后执行一些代码。

请建议我如何实现上述目标

2 个答案:

答案 0 :(得分:0)

你不应该在autowired字段上使用静态。在此处查看更多内容:Can you use @Autowired with static fields? 从HelloWorld中删除静态,你应该没问题

答案 1 :(得分:0)

您无法自动装配静态字段 - 只需从helloWorld字段中删除静态修饰符。

现在的问题是@BeforeClass注释只能放在静态方法上。您必须使用Spring TestExecutionListener.beforeTestClass(TestContext)方法

替换此方法

根据您的要求,您可能会接受现有的侦听器,例如TransactionalTestExecutionListener,它可以在启动事务之前调用您的方法,例如e.t.c。