@RunWith(SpringJUnit4ClassRunner.class)
public void ITest {
@Autowired
private EntityRepository dao;
@BeforeClass
public static void init() {
dao.save(initialEntity); //not possible as field is not static
}
}
我如何让我的服务已经被注入到static init类中?
发布于 2019-12-01 07:11:15
使用Junit 5可以做到这一点(@BeforeAll而不是@BeforeClass)
public void ITest {
@Autowired
private EntityRepository dao;
@BeforeAll
public static void init(@Autowired EntityRepository dao) {
dao.save(initialEntity); //possible now as autowired function parameter is used
}
}
离开该字段意味着它可以在其他测试中使用
发布于 2017-02-16 07:19:52
我一直使用的一种变通方法是使用带有标志的@Before
来跳过为每个测试用例执行的测试
@RunWith(SpringJUnit4ClassRunner.class)
public class BaseTest {
@Autowired
private Service1 service1;
@Autowired
private Service2 service2;
private static boolean dataLoaded = false;
@Before
public void setUp() throws Exception {
if (!dataLoaded) {
service1.something();
service2.somethingElse();
dataLoaded = true;
}
}
}
发布于 2015-03-30 16:34:02
要回答这个问题,我们应该回顾一下Spring2.x版本。
如果想“自动连接”@BeforeTest
类中的bean,可以使用ApplicationContext
接口。让我们看一个例子:
@BeforeClass
public static void init() {
ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
EntityRepository dao2 = (EntityRepository) context.getBean("dao");
List<EntityRepository> all = dao2.getAll();
Assert.assertNotNull(all);
}
发生了什么:我们使用ClassPathXmlApplicationContext
实例化application-context.xml
文件中包含的所有bean。
使用context.getBean()
,我们读取指定的bean (它必须与bean的名称匹配!);然后您可以使用它进行初始化。
您应该为bean指定另一个名称(那就是dao2
!)否则Spring normal的“自动连接”就不能在预定义的bean上工作。
顺便说一下,如果您的测试扩展了AbstractTransactionalJUnit4SpringContextTests
,您可以使用executeSqlScript(sqlResourcePath, continueOnError)
;方法进行一些初始化,这样您就不需要依赖于必须单独测试的类/方法。
https://stackoverflow.com/questions/29340286
复制相似问题