【问题标题】:NullPointerException in Roboguice.setBaseApplicationInjector in JUnit TestJUnit 测试中 Roboguice.setBaseApplicationInjector 中的 NullPointerException
【发布时间】:2013-07-04 17:28:57
【问题描述】:

我遇到了与 Roboguice 和 JUNIT 相关的问题。实际上我正在做一个非常小的测试以使其运行,代码:

import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import roboguice.RoboGuice;
import android.app.Application;
import android.content.Context;

public class FansworldClientTest {
    TaskClient client;
    @Mock
    Application application;
    @Mock
    Context context;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        client = RoboGuice.getInjector(application).getInstance(TaskClient.class);
    }
    @Test
    public void getTimestampTest() {
        Assert.assertNotNull(application);
        Assert.assertNotNull(context);
        Assert.assertNotNull(client);
    }
    @After
    public void teardown() {
        RoboGuice.util.reset();
    }
}

mvn test 命令向我抛出了这个:

java.lang.NullPointerException: null 在 roboguice.RoboGuice.setBaseApplicationInjector(RoboGuice.java:116) 在 roboguice.RoboGuice.getBaseApplicationInjector(RoboGuice.java:59) 在 com.app.api.client.TaskClientTest.setup(TaskClientTest.java:38)

我正在使用 Roboguice 2.0、Junit 4.8.2 和 Mockito 1.9.5。我也在尝试这样做:

MockitoAnnotations.initMocks(this);
RoboGuice.setBaseApplicationInjector(application, RoboGuice.DEFAULT_STAGE);
RoboGuice.getInjector(application).getInstance(FansworldClient.class);

同样的结果。这取自官方 Roboguice 项目的同一个 Astroboy2Test.class。

谢谢!!

【问题讨论】:

    标签: android unit-testing junit mockito roboguice


    【解决方案1】:

    您不能将模拟与 Roboguice 结合使用,最好让 Robolectric 在此处提供您需要的上下文。

    Moritz Post 提供了一个很好的教程来设置这一切:

    http://eclipsesource.com/blogs/2012/09/25/advanced-android-testing-with-roboguice-and-robolectric/

    基于这项工作,我前段时间发表了一篇文章如何在功能测试中使用模拟:

    http://www.thomaskeller.biz/blog/2012/10/18/runtime-replace-implementations-with-roboguice-in-functional-tests/

    【讨论】:

    • 那么,我可以在没有 Mockito 或任何其他 Mock 库的情况下将 Roboguice 与 Robolectric 一起使用?
    • 当然,只是模拟库大大简化了自定义模拟的创建,因为您必须编写更少的样板代码,并且可以使用 Mockito 的 fluent API 进行存根。
    • 好吧,现在我正面临这个错误:github.com/robolectric/RobolectricSample/issues/10
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多