单元测试一个简单的类(使用Dagger 1.2)

时间:2015-06-02 14:49:33

标签: android junit mockito dagger

我想我有一些单位测试 - 匕首错过了。

我正在尝试测试实现此接口的类:

public interface GetAndroidOSVersionInteractor {
    public String execute ();
}

班级就是这个:

public class GetAndroidOSVersionInteractorImpl implements GetAndroidOSVersionInteractor {

    @Inject
    public GetAndroidOSVersionInteractorImpl (){
        super();
    }

    @Override
    public String execute() {
        String version = "android: " + Build.VERSION.RELEASE + " device: " + Build.MANUFACTURER + Build.MODEL;
        return(version);
    }
}

它的注入模块就是这个:

@Module(library = true, complete = false)
public class InteractorsModule {

    @Provides
        GetAndroidOSVersionInteractor provideGetAndroidOSVersionInteractor(GetAndroidOSVersionInteractorImpl getAndroidOSVersionInteractorImpl) {
            return getAndroidOSVersionInteractorImpl;
        }
}

但是当我执行这个测试时,它总是返回-1 NullPointerException:

@RunWith(MockitoJUnitRunner.class)
public class GetAndroidOSVersionInteractorTest extends TestCase {

    GetAndroidOSVersionInteractor getAndroidOSVersionInteractor;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void executeTest(){
        final String os = getAndroidOSVersionInteractor.execute();
        assertNotNull(os);
    }

}

我错过了什么?这是Dagger 1.2的问题吗? 你能解释一下为什么这不起作用吗?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

您最有可能需要以下内容:

@RunWith(MockitoJUnitRunner.class)
public class GetAndroidOSVersionInteractorTest extends TestCase {
    @Inject // <-- this
    GetAndroidOSVersionInteractor getAndroidOSVersionInteractor;

private ObjectGraph testObjectGraph;

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
    testObjectGraph = ObjectGraph.create(new MockModule());
    testObjectGraph.inject(this);
}

@Module(injects={GetAndroidOSVersionInteractorTest.class}, includes={InteractorsModule.class})
public class MockModule {
}