2016-03-16 32 views
0

我一直在关注CoffeeMaker教程here。现在我不想在我的测试中覆盖任何模块/组件,但想要在我的JUnit测试中注入Class ElectricHeater。如何在JUnit测试中用Dagger2注入类

当我这样做时,当我调用heater.on()时,我得到一个NullPointerExeception。不知道我错过了什么。

这里是测试代码。

package coffee; 

import org.junit.BeforeClass; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.JUnit4; 

import javax.inject.Inject; 

@RunWith(JUnit4.class) 
public final class CoffeeMakerTest { 

    @Inject 
    Heater heater; 

    @BeforeClass 
    public static void setUp() { 
    CoffeeComponent coffeeComponent = DaggerCoffeeComponent.builder(). 
    build(); 

    } 

    @Test 
    public void testCoffeeMaker() throws Exception { 
    heater.on(); 
    } 
} 
+0

你还没有说,如果这是行家,gradle产出,或者其他......但无论如何,你会介意,包括您的构建脚本的样本?匕首指南明确指出“[不要使用匕首进行单元测试](http://google.github.io/dagger/testing.html#dont-use-dagger-for-unit-testing)”,但由于它是一个编译时注入框架,我真的认为它应该是可能的,可能与你的构建脚本的调整。 – dcsohl

+0

其他内部构建,我不能分享。是的,我知道匕首不适用于单元测试。我只是试图在JUnit中注入一些用于集成测试框架的类,我打算编写它来测试它是否可行。不过,我找到了答案,我如何才能做到这一点,见下文。 – Prakash

回答

0

修改后的代码

@Singleton 
@Component(modules = { DripCoffeeModule.class }) 
public interface CoffeeComponent { 
    CoffeeMaker maker(); 

    void inject(CoffeeMakerTest coffeeMaker); 
} 

@Before 
public void setUp() { 
    CoffeeComponent coffeeComponent = DaggerCoffeeComponent.builder().build(); 
    coffeeComponent.inject(this); 
} 
+0

请添加一些解释。您的答案目前被标记为“低质量”,最终可能会被移除。 –

相关问题