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
    }
}
如何在静态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
    }
}
离开该领域意味着它可以用于其他测试
小智 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;
    }
  }
}
Spring 2.x 版本的 UPD。
Spring 2.x 支持SpringExtensionJunit 5 Jupiter 的新特性 a ,您所要做的就是:
声明你的测试类 @ExtendWith(SpringExtension.class)
使用 bean注入您的@BeforeAll(替代@BeforeClassJUnit 5 中的)
例如:
@ExtendWith(SpringExtension.class)
...
public void ITest {
    @BeforeAll
    public static void init(@Autowired EntityRepository dao) {
        dao.save(initialEntity);
    }
}
假设您使用 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 次 | 
| 最近记录: |