假设我有一个从类A
扩展的测试类B
。此类A
有一个带@BeforeClass
注释的方法:
@BeforeClass
public static void setUp(){
createFakeData();
}
方法createFakeData()
在类B
中,其功能是在数据库中创建对象。
为了做到这一点,我在班级B
中有一个bean:
@Autowired
private DummyObjectsFactory dummyObjectsFactory;
方法createFakeData()
的内容可能类似于返回FakeData对象的内容:
public FakeData createFakeData() throws Exception
{
return dummyObjectsFactory.createFakeData();
}
我面临的问题是@BeforeClass
方法必须是静态的,这意味着createFakeData
方法也必须是静态的。但我无法将该方法设置为静态,因为我的bean dummyObjectsFactory
将始终为null
。
如何使我的createFakeData
方法静态避免我的dummyObjectsFactory
bean不为空?
答案 0 :(得分:0)
据我所知,JUnit中不允许这样做。但是你可以做一些事情来安排它。
首先,您可以使用 TestNG ,这样可以完全按照您的意愿进行操作。
如果这不是一个选项,您可以使用@BefloreClass
而不是@Before
注释。两者之间的区别在于@BeforeClass
在所有测试之前执行方法,而@Before
在每次测试之前执行方法。如果您使用@Before
,我会使用@Transactional
注释该类,以便删除保存在数据库中的数据。
最后,如果您不想为每个测试执行该方法,可以使用@Before
并平展通话:
@Before
public void init(){
if(!fakeDataCalled){
createFakeData();
fakeDataCalled=true;
}
}
答案 1 :(得分:0)
我相信你想用@RunWith(SpringRunner.class)
注释你的测试类(B),以便正确地进行自动装配。
查看Spring Reference中的第15.4.4节。 您也可以浏览该页面并搜索“RunWith”
注意事项: