我正在使用ActivityInstrumentationTestCase2为我的应用编写集成测试,我正在测试按钮是否正确递增了我的UI中的计数器。
基本测试只是在butotn点击之前和之后获得TextView中显示的值。
在一个版本中,我使用@UiThreadTest标记测试方法,并像这样运行测试
int value1;
int value2;
value1=(int) myText.getTheValue();
myButton.performClick();
value2=(int) myText.getTheValue();
assertEquals(value1 + 1, value2);
一切正常,测试通过。
第二种方法,我不是@UiThreadTest,而是使用
执行点击TouchUtils.clickView(this, myButton);
在这种情况下,断言失败,因为value1等于value2。我不确定是不是因为OnClickListener没有激活,没有按下按钮,或者是因为TouchUtils.clickView在UI线程上运行,并且测试程序在处理程序增加textview的值之前读取value2的值。我在点击之后尝试了Thread.sleep(1000)以查看它是否只需要一些时间,但得到了相同的结果。
如果您想检查点击对活动的其他UI元素的影响,有人可以解释使用TouchUtils的正确方法吗?
感谢。
答案 0 :(得分:2)
protected void setUp() throws Exception {
super.setUp();
setActivityInitialTouchMode(false);
}
您需要将初始触摸保持为假,然后再使用 TouchUtils.clickView()
答案 1 :(得分:-1)
我在这里得到了两分。
并确保clickView有两个参数 clickView(对正在运行的测试用例的引用,对要操作的Button的引用。)
注意:TouchUtils助手类提供了方便的方法来模拟与应用程序的触摸交互。您可以使用这些方法来模拟点击,点击和拖动视图或应用程序屏幕。
警告:TouchUtils方法旨在安全地从测试线程向UI线程发送事件。您不应直接在UI线程或使用@UIThread注释的任何测试方法中运行TouchUtils。这样做可能会引发WrongThreadException。