使用Robotium的Android测试注释

使用Robotium的Android测试注释,android,robotium,Android,Robotium,我目前正在Android上构建一个应用程序,并使用Robotium进行功能测试(顺便说一句,不要在Android 1.6之外的任何东西上使用Robotium,这太麻烦了) 其中一些测试有随机失败的倾向,主要是Robotium缺少文本字段,或者超时,而不是阅读文本。我正在尝试使用@FlakyTest注释,因此在抛出失败的测试错误之前,它们将运行两三次。但是,注释不起作用,失败后测试不会重新运行 以下是我如何使用注释: public class ClassName extends ActivityI

我目前正在Android上构建一个应用程序,并使用Robotium进行功能测试(顺便说一句,不要在Android 1.6之外的任何东西上使用Robotium,这太麻烦了)

其中一些测试有随机失败的倾向,主要是Robotium缺少文本字段,或者超时,而不是阅读文本。我正在尝试使用
@FlakyTest
注释,因此在抛出失败的测试错误之前,它们将运行两三次。但是,注释不起作用,失败后测试不会重新运行

以下是我如何使用注释:

public class ClassName extends ActivityInstrumentationTestCase2<HomeActivity>{

        @LargeTest
        @FlakyTest(tolerance=3)
        public void testMethod(){

        //Here I run my roboitium scripts.

        }
}
公共类类名扩展了ActivityInstrumentationTestCase2{
@最大的
@剥落试验(公差=3)
公共void testMethod(){
//在这里,我运行我的roboitium脚本。
}
}
然后我从命令行运行它:

adb shell am instrument-w com.jayway.test/android.test.InstrumentationTestRunner


eclipse和测试的命令行执行都没有考虑脆弱的测试注释。是否有人看到我尝试应用
@FlakyTest
时出现错误?

我看不出您使用
@FlakyTest
注释有任何问题

我准备了一个快速测试用例来测试@FlakyTest和Robotium(v2.2):

因此,
@FlakyTest
注释肯定被调用了。试验的(最终)失败如下所示:

junit.framework.AssertionFailedError: The text: Doesn't Exist is not found!
而且消息
“不应该出现在这里”
从未被记录

因此,就我所见,您如何声明注释,以及
@FlakyTest
和Robotium v2.2的任何问题都没有问题

也许测试代码的另一部分有问题?

将此添加到代码中:

import android.util.Log;

一般来说,在为Android编写测试时(有或没有Robotium),您必须更加小心。你不能只说“这是可见的”。您需要将所有内容包装在一个“等待”循环中,所以您可以说“等待它可见”。在模拟器中运行时,这是一个特别的问题,因为有时事情需要很长时间,而没有任何好的理由。如果没有等待周期,您将永远不会有一致的运行。我们有几百个测试,我们从来不需要使用FlakyTest注释。

Robotium缺少文本字段,或者超时,不阅读文本意味着 我们必须清楚地检查屏幕上是否存在文本或任何内容,然后只需要执行以下操作

if(solo.searchText("Doesn't Exist", true){
solo.clickOnText("Doesn't Exist");
}

类似于button或其他组件,我们可以通过上述逻辑实现这一点。

您可能希望在robotium邮件列表中询问此问题。您应该使用最新版本的robotium(5.1)
import android.util.Log;
if(solo.searchText("Doesn't Exist", true){
solo.clickOnText("Doesn't Exist");
}