8

我目前正在 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.

        }
}

然后我从命令行运行它:

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

eclipse 和测试的命令行执行都没有考虑到不稳定的测试注释。有人看到我尝试申请的方式有错误@FlakyTest吗?

4

4 回答 4

3

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

于 2012-04-15T17:19:38.673 回答
3

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

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

public class FlakyTestCase extends ActivityInstrumentationTestCase2<Main> {

private static int count = 0;
private Solo solo;

public FlakyTestCase() {
    super("com.stackoverflow.example", Main.class);
}

@Override
public void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
}

@LargeTest
@FlakyTest(tolerance=3)
public void testFlaky(){
    Log.e("FlakeyTestCase", "Execution Count:" + ++count);

    solo.assertCurrentActivity(null,Main.class);
    solo.clickOnText("Doesn't Exist");

    Log.e("FlakeyTestCase", "Shouldn't make it here");
}
}

LogCat 显示以下消息:

Execution Count: 1
Execution Count: 2
Execution Count: 3

所以@FlakyTest肯定会调用注释。测试的(最终)失败显示为:

junit.framework.AssertionFailedError: The text: Doesn't Exist is not found!

并且该消息"Shouldn't make it here"从未被记录。

据我@FlakyTest所知,无论如何声明注释或Robotium v​​2.2的任何问题都没有问题。

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

于 2011-02-27T02:48:24.647 回答
0

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

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

如果像按钮或其他任何组件类似,我们可以通过上述逻辑实现这一点。

于 2014-05-05T09:52:29.017 回答
-3

将此添加到您的代码中:

import android.util.Log;
于 2012-04-15T12:56:16.690 回答