Android执行功能测试订单

时间:2015-07-23 18:46:31

标签: android testing functional-testing android-testing

我有一个应用程序,其中MainActivity布局由两个TextView(tvName和tvEmail)和一个按钮(btnLogout)组成。

我使用这些测试方法进行了功能测试(最后的代码):

  • testUserDetailsAreShown:检查TextView是否包含正确的文本值。
  • testLoginActivityStarts:对btnLogout按钮执行单击操作,并检查是否已加载LoginActivity。

我的问题是,如果我评论testLoginActivityStarts,那么testUserDetailsAreShown传递。但是,当两者都取消注释时,两者都会失败。

java.lang.NullPointerException
at android.support.test.espresso.intent.Intents.resumedActivitiesExist(Intents.java:235)
at android.support.test.espresso.intent.Intents.intended(Intents.java:184)
at android.support.test.espresso.intent.Intents.intended(Intents.java:169)
at net.example.login.MainActivityTest.testLoginActivityStarts(MainActivityTest.java:46)

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: net.example.login:id/tvName

我认为这是因为testLoginActivityStarts在testUserDetailsAreShown之前执行,并且当testUserDetailsAreShown正在执行时,加载的活动不是MainActivity,而是LoginActivity。

任何人都可以帮我吗?我需要让两个测试通过。我确定他们应该通过。

这里是测试代码:

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
private String USER_NAME = "UserName";
private String USER_EMAIL = "UserEmail";

public MainActivityTest(){
    super(MainActivity.class);
}

public void testUserDetailsAreShown() {
    onView(withId(R.id.tvName)).check(matches(withText(USER_NAME)));
    onView(withId(R.id.tvEmail)).check(matches(withText(USER_EMAIL)));
}

public void testLoginActivityStarts() {
    onView(withId(R.id.btnLogout)).perform(click());
    intended(hasComponent(LoginActivity.class.getName()));
}
}

1 个答案:

答案 0 :(得分:7)

确保在测试设置中调用Intents.init()。这应该修复你描述的NullPointerException

java.lang.NullPointerException
at android.support.test.espresso.intent.Intents.resumedActivitiesExist(Intents.java:235)
at android.support.test.espresso.intent.Intents.intended(Intents.java:184)
at android.support.test.espresso.intent.Intents.intended(Intents.java:169)
at net.example.login.MainActivityTest.testLoginActivityStarts(MainActivityTest.java:46)

有关更多信息,请参阅有关Intents.init()

的javadoc