Java JUnit4启动新的活动冻结测试

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";

我想测试我的LoginActivity是否使用Junit4和Espresso启动MainActivity,但是当执行登录单击以启动MainActivity时,它会冻结,并且在单击后不会执行任何代码(在模拟器上打开MainActivity) 代码如下:

@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");
        }
    });