首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在static @BeforeClass中自动连接字段?

如何在static @BeforeClass中自动连接字段?
EN

Stack Overflow用户
提问于 2015-03-30 15:11:48
回答 4查看 22.4K关注 0票数 47
@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类中?

EN

回答 4

Stack Overflow用户

发布于 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
    }
}

离开该字段意味着它可以在其他测试中使用

票数 33
EN

Stack Overflow用户

发布于 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;
    }
  }
}
票数 29
EN

Stack Overflow用户

发布于 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);方法进行一些初始化,这样您就不需要依赖于必须单独测试的类/方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29340286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档