我设法在我的XXTest.java中编写了两个包含robotium-solo-3.2.1.jar的测试用例,幸运的是在JUnit视图中它显示第一个完成,设备完全正常工作(在模拟器上)。
然后它进入第二个,但它只是永远挂在那里!抱歉,我无法使用我的帐户附加屏幕截图。
这是我的代码:
public class XXTest extends ActivityInstrumentationTestCase2<SignInActivity> {
private Solo solo;
private Activity mActivity;
private static final String account = "someone";
private static final String pwd = "123456";
@SuppressWarnings("deprecation")
public XXTest() {
super("com.acompany.android", SignInActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
this.mActivity = getActivity();
solo = new Solo(getInstrumentation(), mActivity);
}
@Smoke
public void testLogIn() throws Exception {
EditText accountInput = (EditText) solo.getView(R.id.edit_account);
EditText pwdInput = (EditText) solo.getView(R.id.edit_password);
solo.clearEditText(accountInput);
solo.clearEditText(pwdInput);
solo.enterText(accountInput, account);
solo.enterText(pwdInput, pwd);
solo.clickOnButton(mActivity.getResources()
.getString(R.string.text_sign_in));
solo.waitForActivity("MainActivity");
solo.assertCurrentActivity("Expect MainActivity shown...", "MainActivity");
boolean expected = true;
boolean actual = solo.searchButton(mActivity.getResources().getString(
R.string.welcome_dialog_start));
assertEquals("find friend dialog not shown", expected, actual);
}
@Smoke
public void testOpenPref() throws Exception {
solo.goBack();
solo.clickOnMenuItem(mActivity.getResources().getString(
R.string.text_preferences));
solo.assertCurrentActivity("Expected PrefActivity..", "PrefActivity");
solo.goBackToActivity("MainActivity");
solo.assertCurrentActivity("Expected MainActivity..", "MainActivity");
}
protected void tearDown() throws Exception {
super.tearDown();
}
}
我从Robotium教程中搜索了NotePadTest.java的示例,其中的3个测试用例正常工作!
请告诉我哪里出错?我在某处遗漏了什么吗?为什么第二个测试用例没有运行?
顺便说一句。可以在测试项目中有多个类扩展ActivityInstrumentationTestCase2吗?好奇!
答案 0 :(得分:3)
你需要在tearDown()中使用solo.finishOpenedActivities()。
答案 1 :(得分:2)
@Robert - 这是Activity测试本身的问题,而不是特定于robotium的问题。
对于第一种测试方法: 您的基本流程如下: 1>在setUp()方法中加载主要活动(比如 MainActivity )&gt;在testMethod1()中执行一些操作 - 这会导致您进入另一个活动(例如 AnotherActivity )&gt;在tearDown()中,你可以在setUp()方法中杀死已启动的活动,该方法是 MainActivity
注意:但 AnotherActivity 仍然有效
对于第二种测试方法: 您的基本流程如下: 2>在setUp()方法中尝试再次加载主要活动(比如 MainActivity ),尽管先前启动的 AnotherActivity 尚未被杀死, 所以它挂在那里 ,它甚至没有进入testMethod2()fr执行 -
注意:当执行标记指向testMethod2()时,eclipse图形运行器显示它挂起,人们认为它卡在testMethod2()中 - 但问题在于testMethod2()的setUp()不在testMethod2中( )本身。
解决方案: 1&gt;只需查看您的交叉活动导航 - 在每个testMethod()的末尾使用solo.goBack()从您当前的Activity恢复到相同的主要活动 MainActivity (您已登陆因为你的行为)
结果 - 在testMethod1()结束时,只有在setUP()中打开的主要活动仍然存在。因此它被成功杀死。没有活动保持活着并且对于testMethod2()。setUP()能够再次加载 MainActivity 而不会挂起 - 并且testMethod2()被执行。
希望它澄清:)