我目前正在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 instrument -w com.jayway.test / android.test.InstrumentationTestRunner
eclipse和测试的命令行执行都没有考虑到片状测试注释。有没有人看到我尝试应用@FlakyTest
的错误?
答案 0 :(得分: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,v2.2的注释或任何问题都没有任何问题。
也许您的测试代码的另一部分存在问题?
答案 1 :(得分:3)
一般来说,在为Android编写测试时(有或没有Robotium),你必须要小心。你不能只说“这是可见的”。你需要将所有东西都包裹在“等待”周期中,所以会说“等待这个可见”。在模拟器中运行时,这尤其是一个问题,因为有时候事情需要很长时间而没有任何充分的理由。没有等待周期,您将永远不会有一致的运行。我们有几百个测试,我们从不需要使用FlakyTest注释。
答案 2 :(得分:0)
Robotium缺少文本字段或超时,不读取文本意味着 我们必须清楚地检查屏幕上是否存在文本或任何文本只需执行
等操作if(solo.searchText("Doesn't Exist", true){
solo.clickOnText("Doesn't Exist");
}
如果像按钮或其他任何组件我们可以通过上述逻辑实现这一点。
答案 3 :(得分:-3)
将此添加到您的代码中:
import android.util.Log;