ActivityInstrumentationTestCase2和android库项目:资源无法加载

时间:2011-06-13 15:57:20

标签: android unit-testing android-activity project

我有以下设置:

  • LibProjectWithActivity - 一个包含 PreviewActivity
  • 的android库项目
  • AppProject - 通常的Android项目使用 LibProjectWithActivity
  • AppProjectTest - 一个Android JUnit测试项目,它是一个 ActivityInstumentationTestCase2

首先:所有基本依赖项都设置正确,因为我可以在模拟器中完美地启动我的应用程序,它显示 PreviewActivity 就行了,事情正常 - 这里没有问题。

但是我没有启动测试...这是设置:

public class PreviewActivityTest 
      extends ActivityInstrumentationTestCase2<PreviewActivity> {
    public PreviewActivityTest() {
        // note: if i put "com.the7art.libprojectwithactivity" instead it wont find it
        // and will fail with "activity not found"
        super("com.the7art.appproject", PreviewActivity.class);
    }

    public void testDummy() {
        getActivity();
    }
}

这会抛出一个NullPointerException,如下所示:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.the7art.appproject/com.the7art.libprojectwithactivity.PreviewActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
    .......
Caused by: java.lang.NullPointerException
    at com.the7art.libprojectwithactivity.PreviewActivity.onCreate(PreviewActivity.java:37)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
    ... 11 more

以下是PreviewActivity.java:36,37:

mButtonAdd = (Button) findViewById(R.id.button_add);
mButtonAdd.setOnClickListener(this);

所以这个异常意味着完全找到了R.id.button_add(在libproject中),但找不到这个id的视图。如果我注释掉这段代码,那么在尝试获取另一个资源时它会同样崩溃。

看起来测试使用正确的R.java,但错误的Context对象。或类似的东西。

同样,应用程序代码还可以,因为它可以在模拟器中运行,测试设置有问题......

有关错误以及如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:1)

是的,测试只能使用Activity项目作为目标,查看Test清单文件中的projectTarget。 这意味着您的测试可以使用与应用程序相同的上下文。仅访问应用程序的项目资源。但是,您无法访问Library的项目资源,您可以使用库项目中的R.string.XX,因为这是首次构建它,并且它只是一个生成的标识符,将在应用程序的上下文中用于查找资源。因此,结果将是找到的资源中的错误或资源未找到异常。 有两种方法可以测试库项目here they are