Android测试中TouchUtils.clickView()和Button.performClick()之间的区别?

时间:2014-09-15 21:56:40

标签: android android-activity android-testing

我正在使用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的正确方法吗?

感谢。

2 个答案:

答案 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。