Java JUnit-尝试在@Before中优化初始化
在我的IT测试类中,我在Java JUnit-尝试在@Before中优化初始化,java,spring-mvc,junit4,Java,Spring Mvc,Junit4,在我的IT测试类中,我在@之前有注释,用于初始化我使用的一些testUtil类,例如: @Autowired private ServiceA serviceA; @Autowired private ServiceB serviceB; @Autowired private ServiceC serviceC; protected TestUtilA testUtil; protected TestUtilB testUtil2; @Before protected void runB
@之前有注释,用于初始化我使用的一些testUtil类,例如:
@Autowired
private ServiceA serviceA;
@Autowired
private ServiceB serviceB;
@Autowired
private ServiceC serviceC;
protected TestUtilA testUtil;
protected TestUtilB testUtil2;
@Before
protected void runBeforeTest() {
testUtil = new TestUtilA(serviceA, serviceB);
testUtil2 = new TestUtilB(serviceC);
}
问题是,它在每次测试之前初始化测试UTIL(但基本上我只需要做一次)。
如果我用If(testUtil==null)
将初始化部分包装在runBeforeTest()
中,那么测试将在这些测试UTIL上抛出NPE
我如何才能对类中的所有测试只初始化一次这些UTIL?您可以使用@PostConstruct
注释来实现您想要的目标
从:
构造后注释用于需要修改的方法
在完成依赖项注入后执行,以执行任何
初始化。必须在放置类之前调用此方法
投入使用。此批注必须在以下所有类上受支持:
支持依赖注入。使用PostConstruct注释的方法
即使类未请求调用任何资源,也必须调用
注射。此注释只能对一个方法进行注释
代码如下所示:
@Autowired
private ServiceA serviceA;
@Autowired
private ServiceB serviceB;
@Autowired
private ServiceC serviceC;
protected TestUtilA testUtil;
protected TestUtilB testUtil2;
@PostConstruct
public void runOnlyOnce() {
testUtil = new TestUtilA(serviceA, serviceB);
testUtil2 = new TestUtilB(serviceC);
}
@Before
protected void runBeforeTest() {
// Do something before each test
}
下面的设置应该可以工作
@RunWith(SpringJUnit4ClassRunner.class)
Ehrm。。。测试!-空
当然会导致空指针
。。。那么您的util将永远不会被分配。。。改为使用if(testUtil==null){create stuff}
。您如何注释您的测试类?@M.Deinum-这是一个拼写错误,已修复。thanks@kuhajeyan-@RunWith(BlockJUnit4ClassRunner.class)那么我不确定您的bean实例是否被正确注入。您的测试类需要这样的设置才能找到beans@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes={ApplicationConfig.class})尝试将@PostConstruct
替换为@BeforeClass
,并将该类更改为公共静态void
。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={ApplicationConfig.class})
public class MyTest {
@Autowired
private ServiceA serviceA;
@Autowired
private ServiceB serviceB;
@Autowired
private ServiceC serviceC;
protected TestUtilA testUtil;
protected TestUtilB testUtil2;
@Before
protected void runBeforeTest() {
testUtil = new TestUtilA(serviceA, serviceB);
testUtil2 = new TestUtilB(serviceC);
}
}