Android测试:如何访问没有上下文活动的应用程序资源

时间:2016-03-22 17:46:09

标签: android testing resources

我在res / raw命名的parameters.xml中有一个资源xml文件。 此文件通过名为Parameters的类使用。 类Parameters使用Xpath从xml文件中提取数据。

在主要活动中,我编写了这个:

Parameters parameters = new
Parameters(getResources().openRawResource(R.raw.parameters));

一切正常!

我想使用xml资源测试Parameters类 没有活动==>我不再有上下文了

目前,我已经在Parameters课程中编写了一个主要方法 (因为我也将这个类用于其他非android项目)

我试过这个:

1- Resources.getSystem().openRawResource(R.raw.parameter) -     不起作用,因为我的xml文件不是系统资源

2-创建一个扩展InstrumentationTestCase的内部类(在main方法中) -    不起作用:异常运行时存根!

有什么想法解决我的问题吗? 感谢

3 个答案:

答案 0 :(得分:0)

如果没有上下文实例,我认为你不能这样做。您可以阅读更多here

就像有人指出的那样,最好将资源放在Activity / Fragment中,然后将其传递给你需要它的对象。

答案 1 :(得分:0)

您可以为您的应用程序创建静态引用,如下所示:

public class YourApplicationClass extends Application{

    private static YourApplicationClass instance;

    public YourApplicationClass (){
        instance = this;
    }

    public static YourApplicationClass getInstance(){
            return instance;
    }
}

然后:

YourApplicationClass .getInstance().getResources().openRawResource(R.raw.parameters);

添加应用程序的任何一点都将获得资源。

另外,不要忘记在清单中添加这个内部应用程序元素:

 android:name=".YourApplicationClass"

答案 2 :(得分:0)

我找到了使用Classloader

java -ea -classpath
来执行的解决方案

public static void main(String[] args) {
    Parameters parameters = new Parameters(ClassLoader.class.getClass().
    getResourceAsStream("/res/raw/parameters.xml"));
    ....
}

public static void main(String[] args) { Parameters parameters = new Parameters(ClassLoader.class.getClass(). getResourceAsStream("/res/raw/parameters.xml")); .... }

cd myprojectPath/app/src/main/java
javac Parameters.java
java -ea -classpath ".:../" Parameters