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