Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从androidTest(instrumented test)测试类中的应用程序访问资源?_Java_Android_Junit - Fatal编程技术网

Java 如何从androidTest(instrumented test)测试类中的应用程序访问资源?

Java 如何从androidTest(instrumented test)测试类中的应用程序访问资源?,java,android,junit,Java,Android,Junit,如果我完全误解了使用仪器化测试的时间和地点,请原谅 我目前正在为我之前编写的CategoryButton类编写CategoryButtonInstrumentedTest类 CategoryButtonInstrumentatedTest.java public class CategoryButtonInstrumentedTest { private Context context; private CategoryButton button; private Un

如果我完全误解了使用仪器化测试的时间和地点,请原谅

我目前正在为我之前编写的CategoryButton类编写CategoryButtonInstrumentedTest类

CategoryButtonInstrumentatedTest.java

public class CategoryButtonInstrumentedTest {

    private Context context;
    private CategoryButton button;
    private UnscrollableListView listView;

    @Before
    public void setUp() {
        context = InstrumentationRegistry.getInstrumentation().getTargetContext();
        button = (CategoryButton) ((Activity) context).findViewById(R.id.button);
        button.connect(listView);
    }

    @Test
    public void onClickTest() {
        boolean start = listView.isMaximized();
        button.performClick();
        boolean end = listView.isMaximized();
        assertNotEquals(start, end);
    }
}
CategoryButton.java

public class CategoryButton extends androidx.appcompat.widget.AppCompatButton implements View.OnClickListener {

    private static final String TAG = CategoryButton.class.getSimpleName();

    private UnscrollableListView listView;

    public CategoryButton(Context context) {
        super(context);
    }

    public CategoryButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CategoryButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void onClick(View view) {
        //swap the visibility of the list view
        if (listView != null) {
            if (!listView.isMaximized()) {
                listView.maximize();
            } else {
                listView.minimize();
            }
        } else {
            Log.d(TAG, "Error: please connect an unscrollable list view to the category button");
        }
    }

    public void connect(UnscrollableListView listView) {
        this.listView = listView;
    }
}
CategoryButton类只是从Button超类重写onClick()方法。此外,CategoryButton可以使用connect(UncollableListView listView)方法连接到UncollableListView。这允许CategoryButton使用onClick()方法切换其连接到的UncollableListView的可见性

如何在CategoryButtonInstrumentationTest类中创建新的CategoryButton,以便测试其功能

这是我一直在尝试的

context = InstrumentationRegistry.getInstrumentation().getTargetContext();
button = (CategoryButton) ((Activity) context).findViewById(R.id.button);
我得到了上下文,据我所知,它包含了应用程序的所有类和资源,然后尝试引用MainActivity中的按钮,id为button。 不幸的是,当我试图将ContextImpl强制转换为活动时,我遇到了一个强制转换错误。所以我很确定我的第二排完全错了

我还想问,在这种情况下,是否应该进行仪器化测试?我会使用UI测试吗

多谢各位。我将非常感谢任何帮助


注意:我使用的是JUnit4.12。

可能是因为您没有导入该类?您遗漏了导入的内容,但可能是由于缺少导入而无法访问该文件。这里有一篇关于它的文章


你能解释一下为什么我需要将测试类导入到我的主要活动中吗?不是反过来吗?另外,我的包名是com.example.viewer,因此我要导入com.example.viewer.CategoryButtonInstrumentedTest?您导入测试类是因为您的应用程序在主活动中运行。导入测试类使主活动可以访问其内容。导入com.example.viewer.CategoryButtonInstrumentedTest是您要导入的,对吗。你把它放在其他导入的上面。实际上我明白你现在说的了-你想访问文本类中的主要活动资源,那么是的,你需要导入主要活动。如果是这样,那么你想为主要类和测试类中需要的内容创建另一个类。将另一个小类同时导入到测试和主活动中——这样就不会将整个主活动导入到另一个小类中。明白我的意思吗?
import com.android_examples.com.yourpackagename.CategoryButtonInstrumentatedTest;
public class MainActivity extends Activity {};