1

我的应用程序上有两个活动:登录活动 (loginActivity) 和第二个活动 (mainActivity)。我想用 Espresso 来测试 loginActivity 上的登录,所以我写了这个测试:

public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {

    public LoginActivityTest() {
        super(LoginActivity.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();

        getActivity();
    }

    public void testLogin() throws Exception {
        onView(withId(R.id.button_log_in)).perform(click());

        onView(withId(R.id.container)).check(matches(isDisplayed()));
    }
}

问题是,当应用程序启动时,如果用户以前登录过,loginActivity 会立即启动 mainActivity,并且在执行测试时它会失败并出现错误:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.test.android.development:id/R.id.button_log_in

注意:如果我在运行测试之前启动应用程序并注销,错误就会消失。

提前致谢!

4

2 回答 2

2

我明白你说的。在 UI 测试中,我们有多个注释。我认为你应该使用@BeforeClass方法(@BeforeClass方法调用 Before onCreat方法)。因此,在@BeforeClass方法中,使用数据库填充您的列表,然后删除数据库。然后在@AfterClass方法中(@AfterClass方法调用After onDestroy方法)。像以前的数据库一样创建新数据库,并在@BeforeClass方法中使用相同的List。希望对你有帮助。

于 2021-12-26T13:04:41.860 回答
-1

if仅当用户之前未登录时才使用 an来执行测试。然后您可以添加 anelse来测试登录状态。

否则,您必须尝试捕获 NoMatchingViewException 以告诉您的应用在登录用户的情况下不要执行登录测试。就像是:

try {
     // your test code here
  } catch (NoMatchingViewException e){
    Log.d(TAG_LOG, "No login test performed!");
  }

让我知道这是否有帮助:)

于 2015-02-11T11:27:54.727 回答