使用下面的代码,测试不会按照我想要的顺序执行。 test_homescreen在test_splashscreen之前执行。
我想指定要运行的测试及其执行顺序。 我相信我需要创建一个测试套件,但我不知道如何实现它。
package com.myapp.test;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
import com.myapp.R;
public class myTest extends ActivityInstrumentationTestCase2{
private static final String TARGET_PACKAGE_ID="com.myapp.test";
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.myapp.gui.SplashScreen";
private static Class launcherActivityClass;
static{
try
{
launcherActivityClass=Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e){
throw new RuntimeException(e);
}
}
public myTest ()throws ClassNotFoundException{
super(TARGET_PACKAGE_ID,launcherActivityClass);
}
private Solo solo;
@Override
protected void setUp() throws Exception{
solo = new Solo(getInstrumentation(),getActivity());
}
public void test_splashscreen() throws InterruptedException {
TextView splashAppVersion = (TextView) solo.getView(R.id.AppVersion);
assertTrue(splashAppVersion.isShown());
}
public void test_homescreen() throws InterruptedException {
ListView lv = (ListView) solo.getView(R.id.List);
assertTrue(lv.isShown());
}
@Override
public void tearDown() throws Exception {
try {
solo.finishOpenedActivities();
} catch (Throwable e) {
e.printStackTrace();
}
super.tearDown();
}
}
执行第一个test_splashscreen(),然后执行test_homescreen()
仅执行test_homescreen()
这篇文章似乎接近我想要的但我无法利用它。太通用了。 Android Robotium - How to manage the execution order of testcases?
答案 0 :(得分:3)
我们知道robotium按字母顺序运行测试用例。因此,为了获得更好的结果,我们可以为不同的活动分别设稍后,与该活动相关的其他测试用例可以保存在同一个包中(为单独的活动保留单独的包)。这将有助于将相同活动的测试用例一起运行。要更改测试顺序,您可以在命名测试用例时始终使用字母表。例如:“testAddSplash”将在“testHomeScreen”之前运行
您也可以使用suite()
方法:
public static final Test suite()
{
TestSuite testSuite = new TestSuite();
testSuite.addTest(new MyTestCase("test1"));
testSuite.addTest(new MyTestCase("test2"));
return testSuite;
}
你的测试用例必须有一个no-arg构造函数和一个带有字符串参数的构造函数,如下所示。
public MyTestCase(String name)
{
setName(name);
}
答案 1 :(得分:1)
首先,依赖于按特定顺序运行的测试是不好的。如果他们要求一个接一个地运行你应该问自己为什么他们分开测试?如果他们依赖先前的测试状态,则说明先前测试中的任何失败都会导致下一次测试失败。
现在已经这么说了,你可能会说我不在乎我只想让它发挥作用。因此,无论如何,我会给你答案。您当然可以像其他人所说的那样做,并将您的测试重命名为按字母顺序运行。但你似乎想要更多的控制水平,所以这就是:
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite(AllTests.class.getName());
suite.addTest(TestSuite.createTest(myTest.class, "test_splashscreen"));
suite.addTest(TestSuite.createTest(myTest.class, "test_homescreen"));
suite.addTest(TestSuite.createTest(myTest.class, "test_splashscreen"));
return suite;
}
}
这有很多问题,因为您必须将测试名称作为字符串给出,因此如果您重构测试名称,您的套件将会中断(还有很多其他原因)。通常,测试套件更多地用于在一次运行中将测试类分组在一起。
答案 2 :(得分:0)
你可以这样命名测试案例:
public void test1_whatever()....
public void test3_other()...
public void test2_mytest()...
当你运行它们时,订单将是:
test1_whatever()
test2_mytest()
test3_other()