Robolectric:setupActivity()中的NullPointerException

时间:2017-03-02 09:09:39

标签: android android-testing robolectric

我正在尝试使用Robolectric来测试我的活动,但是当我尝试使用Robolectric设置Activity时,我总是得到一个NPE。我已按照robolectric.org网站上的指南进行操作。

这是我的代码:

@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP, manifest = "src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
@Ignore
public class MainActivityUnitTest {

    private MainActivity activity;

    @Before
    public void setup() {
        activity = Robolectric.setupActivity(MainActivity.class);
    }

    @Test
    public void dummyTest() {
        assertTrue(true);
    }
} 

其他一些信息:我在项目中使用Dagger2作为DI。 我得到的例外:

java.lang.NullPointerException
    at org.robolectric.internal.ShadowExtractor.extract(ShadowExtractor.java:5)
    at org.robolectric.Shadows.shadowOf(Shadows.java:1165)
    at org.robolectric.shadows.CoreShadowsAdapter.getMainLooper(CoreShadowsAdapter.java:42)
    at org.robolectric.util.ComponentController.<init>(ComponentController.java:31)
    at org.robolectric.util.ActivityController.<init>(ActivityController.java:35)
    at org.robolectric.util.ActivityController.of(ActivityController.java:27)
    at org.robolectric.Robolectric.setupActivity(Robolectric.java:46)
    at com.me.myapplication.MainActivityUnitTest.setup(MainActivityUnitTest.java:32)

1 个答案:

答案 0 :(得分:1)

尝试:https://github.com/robolectric/robolectric/issues/3169

&#34; AGP 3.0包括为更好地支持单元测试所做的更改(通过将合并的资源,资产+ AndroidManifest.xml作为一等公民以及Java代码包含在内)。

可以通过将以下配置添加到build.gradle文件

来启用此功能
android {
...
testOptions {
unitTests {
includeAndroidResources = true
}
}

&#34;