我有一个应用程序,其中MainActivity布局由两个TextView(tvName和tvEmail)和一个按钮(btnLogout)组成。
我使用这些测试方法进行了功能测试(最后的代码):
我的问题是,如果我评论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()));
}
}
答案 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