Android单元测试

Android单元测试,android,unit-testing,wait,Android,Unit Testing,Wait,在使用Android测试框架测试Android应用程序时,如何让测试等待我正在等待网络响应,然后再继续。我不想使用Thread.sleep,因为我不确定要等待多长时间。还尝试了waitForIdleSync(),但似乎不起作用。还有别的办法吗 我有enterCredentials方法,它输入用户名和密码并单击登录按钮。在获取用户对象以验证凭据之前,我需要等待一段时间,然后才能获取用户对象并将其保存在数据库中。我需要Thread.sleep()的替代品。我已经尝试过waitForIdleSync(

在使用Android测试框架测试Android应用程序时,如何让测试等待我正在等待网络响应,然后再继续。我不想使用Thread.sleep,因为我不确定要等待多长时间。还尝试了waitForIdleSync(),但似乎不起作用。还有别的办法吗

我有enterCredentials方法,它输入用户名和密码并单击登录按钮。在获取用户对象以验证凭据之前,我需要等待一段时间,然后才能获取用户对象并将其保存在数据库中。我需要Thread.sleep()的替代品。我已经尝试过waitForIdleSync(),但似乎不起作用

@Override
    protected void setUp() throws Exception {
        super.setUp();
        mActivity = getActivity();
        enterCredentials();      
        Thread.sleep(2000);
        testLoggedInUser();

    }

    public void testLoggedInUser() {
        mMyApplication = this.getInstrumentation().getTargetContext().getApplicationContext();
        User user = mMyApplication.getUser();
        String email = user.getEmail();
        assertEquals(EMAIL, email);
    }

    public void enterCredentials() {

        final EditText mUsername = (EditText) mActivity.findViewById(R.id.email);
        final EditText mPassword = (EditText) mActivity.findViewById(R.id.password);
        final Button login = (Button) mActivity.findViewById(R.id.logIn);
        mActivity.runOnUiThread(new Runnable() {

            public void run() {
                mUsername.setText(EMAIL);
                mPassword.setText(PASSWORD);
                login.performClick();
            }
        });

    }

您可以在一个大线程中运行两个线程。一个线程将等待连接同步。您可以将其转换为if语句或其他任何语句,并具有时间控件,只有在同步成功时才会调用另一个线程。如果达到了您不希望运行测试的时间限制,您可以退出应用程序或执行任何您想执行的操作。因此,实际上您将避免使用Thread.sleep(),并且还可以进行一些时间控制


但是,如果您不想等待太久,那么使用小间隔的Thread.sleep()和if语句来检查连接是否最终成功似乎是一种可行的方法。在退出之前尝试一下。

。什么??请细化你的问题,因为我无法理解你的问题是什么。你在运行什么样的测试?除了验收/集成测试之外,你的测试应该快速且独立,你应该模拟/间谍/。。。您的边界,特别是网络请求我正在尝试测试我的应用程序中的登录功能,在该功能中,我输入凭据并发送post请求,服务器将返回一个用户对象。因此,在测试时,我希望等待接收此用户对象,然后我可以验证用户凭据。那么,在这种情况下,我如何让测试等待。请同时显示一些您尝试过的代码。请有人现在停止等待。