Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 JUnit-尝试在@Before中优化初始化_Java_Spring Mvc_Junit4 - Fatal编程技术网

Java JUnit-尝试在@Before中优化初始化

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

在我的IT测试类中,我在
@之前有
注释,用于初始化我使用的一些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); 
}


}