代码之家  ›  专栏  ›  技术社区  ›  Martin Häusler

匕首2:如何在JUnit测试中使用@Inject?

  •  0
  • Martin Häusler  · 技术社区  · 6 年前

    我希望能够用dagger2将依赖注入到JUnit测试中(我是这个框架的新手)。从春天开始,你可以这样做:

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = MyApplication.class)
    public class MyTestClass {
    
        @Autowired
        private MyService service;
    
        @Test
        public void testMySerivce() { /* ... */ }
    
    }
    

    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 .

    任何关于如何做到这一点的提示都将不胜感激。

    1 回复  |  直到 4 年前
        1
  •  5
  •   Jeff Bowman    6 年前

    我还没有看到任何内置的特性,或任何突出的测试库,支持这一点。

    Dagger在编译时执行所有的依赖关系连接,并且只按照您告诉它的方式执行;与Spring不同,没有编写代码来在运行时读取测试类或提供它所需的依赖项。Dagger对Guice和Spring的吸引力来自于编译时编译、验证和优化。虽然你所描述的会非常有用,但这种反思与匕首最初的动机是对立的。 要么用生成的代码编译Dagger组件以注入测试,要么像上面列出的那样,您需要能够独立地拉出这些依赖项。