Java JUnit4启动新的活动冻结测试
我想测试我的LoginActivity是否使用Junit4和Espresso启动MainActivity,但是当执行登录单击以启动MainActivity时,它会冻结,并且在单击后不会执行任何代码(在模拟器上打开MainActivity) 代码如下:Java JUnit4启动新的活动冻结测试,java,android,junit4,android-testing,android-espresso,Java,Android,Junit4,Android Testing,Android Espresso,我想测试我的LoginActivity是否使用Junit4和Espresso启动MainActivity,但是当执行登录单击以启动MainActivity时,它会冻结,并且在单击后不会执行任何代码(在模拟器上打开MainActivity) 代码如下: @RunWith(AndroidJUnit4.class) @LargeTest public class LoginActivityTest { private static String TAG = "LoginActivityTest";
@RunWith(AndroidJUnit4.class)
@LargeTest
public class LoginActivityTest {
private static String TAG = "LoginActivityTest";
private static String phoneNumber = "xxxxxxxxx";
private static String password = "yyyyyy";
LoginActivity activity;
@Rule
public ActivityTestRule<LoginActivity> mActivityRule = new ActivityTestRule<>(LoginActivity.class);
@Before
public void getActivity() {
activity = mActivityRule.getActivity();
}
@Test
public void checkIfLoginIsWorking() {
Log.i(TAG, "Checking if login is working properly");
Instrumentation.ActivityMonitor activityMonitor = InstrumentationRegistry.getInstrumentation().addMonitor(MainActivity.class.getName(), null, false);
Assert.assertNotNull("Monitor null", activityMonitor);
onView(withId(R.id.zone_button_continue)).perform(ViewActions.click());
onView(withId(R.id.loginButton)).check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
onView(withId(R.id.number)).check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
onView(withId(R.id.password)).check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
onView(withId(R.id.number)).perform(ViewActions.typeText(phoneNumber));
onView(withId(R.id.password)).perform(ViewActions.typeText(password));
Log.i(TAG, "0");
onView(withId(R.id.loginButton)).perform(ViewActions.click());
Log.i(TAG, "1");
MainActivity mainActivity = (MainActivity) activityMonitor.waitForActivity();
//MainActivity mainActivity = (MainActivity) InstrumentationRegistry.getInstrumentation().waitForMonitor(activityMonitor); //Also tried. no luck
//MainActivity mainActivity = (MainActivity) InstrumentationRegistry.getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5); //Also tried, no luck
Assert.assertNotNull(mainActivity);
mainActivity.finish();
}
@After
public void tearDown() throws Exception {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
与:
它解决了问题,但我对此不太满意,因为我认为浓缩咖啡可以处理所有的线程内容,并且可以让我的生活更轻松,因为如果我想对新打开的活动执行一些单击或输入操作,我必须再次调用runOnUiThread并在那里执行单击/输入等操作。也许我误解了这个概念,或者我只是做错了什么。如有任何意见,将不胜感激 有人吗?有什么想法吗?:)
onView(withId(R.id.loginButton)).perform(ViewActions.click());
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.findViewById(R.id.loginButton).performClick();
Log.i(TAG, "1");
}
});