mem*_*und 33 java junit spring spring-test
@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
}
}
Run Code Online (Sandbox Code Playgroud)
如何在静态init类中注入我的服务?
Vla*_*dtn 27
使用 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
}
}
Run Code Online (Sandbox Code Playgroud)
离开该领域意味着它可以用于其他测试
小智 17
我一直使用的一个解决方法是使用@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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Spring 2.x 版本的 UPD。
Spring 2.x 支持SpringExtension
Junit 5 Jupiter 的新特性 a ,您所要做的就是:
声明你的测试类 @ExtendWith(SpringExtension.class)
使用 bean注入您的@BeforeAll
(替代@BeforeClass
JUnit 5 中的)
例如:
@ExtendWith(SpringExtension.class)
...
public void ITest {
@BeforeAll
public static void init(@Autowired EntityRepository dao) {
dao.save(initialEntity);
}
}
Run Code Online (Sandbox Code Playgroud)
假设您使用 Spring 2.x 正确配置了 JUnit 5 Jupiter
更多关于它的信息:https : //docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-junit-jupiter-extension
在我看来,你试图在测试之前填充数据库.
我会尝试两种选择:
@Sql
@DatabaseSetup
和@DatabaseTearDown
将要做的事情在DB你需要我知道这并没有回答如何在静态注入bean,@BeforeClass
但是它看起来正在解决你的问题.
更新:
我最近在我的项目中遇到了同样的问题并挖出了这篇帮助我的文章,我认为这是处理这类问题的优雅方式.您可以SpringJUnit4ClassRunner
使用侦听器进行扩展,该侦听器可以使用您定义的所有bean进行实例级别设置
归档时间: |
|
查看次数: |
13995 次 |
最近记录: |