gpt4 book ai didi

java - Dagger 2 : How to use @Inject in a JUnit test?

转载 作者:行者123 更新时间:2023-11-28 20:26:49 25 4
gpt4 key购买 nike

我希望能够使用 Dagger 2 将依赖项注入(inject) JUnit 测试(我是这个框架的新手)。来自 Spring,在那里你可以做这样的事情:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MyApplication.class)
public class MyTestClass {

@Autowired
private MyService service;

@Test
public void testMySerivce() { /* ... */ }

}

...但是对于 Dagger 2,我还没有找到不依赖显式 DaggerMyComponent.builder().build().myService() 的解决方案。

理想情况下,我认为解决方案如下所示:

// tell JUnit that dagger needs to do some post processing
@RunWith(DaggerJUnit4Runner.class)
// tell dagger which component classes to use for injection
@Components(MyComponent.class)
public class MyTestClass {

@Inject
private MyService service;

@Test
public void testMySerivce() { /* ... */ }

}

很遗憾,没有DaggerJunit4Runner

任何有关如何实现这一点的提示都将不胜感激。

最佳答案

我还没有看到任何内置功能,也没有看到任何支持它的著名测试库。

Dagger 在编译时完成所有的依赖连接,并且只按照您指定的方式进行;与 Spring 不同,没有编写代码来在运行时读取测试类或提供所需的依赖项。 Dagger 对 Guice 和 Spring 的吸引力来自编译时编译、验证和优化。尽管您描述的内容非常有用,但这种反射(reflection)与 Dagger 的原始动机背道而驰。 要么您的 Dagger 组件使用生成的代码进行编译以注入(inject)测试,要么您需要能够像上面列出的那样独立地提取这些依赖项。

对于单元测试,您可能需要跳过 Dagger 并手动创建您的类或它们的模拟;对于系统或集成测试,您需要在组件定义中公开您需要的所有类。如果你想用测试替身替换依赖关系以实现可重复性或隔离,你需要使你的组件具有足够的可配置性以接受替换实现,或者你需要创建一个新的用于测试的组件实现,而不是使用测试替身真正的实现。

关于java - Dagger 2 : How to use @Inject in a JUnit test?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52636100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com