2016-03-16 30 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

請添加一些解釋。您的答案目前被標記爲「低質量」,最終可能會被移除。 –

相關問題