【问题标题】:Android unit test安卓单元测试
【发布时间】:2014-06-25 21:19:10
【问题描述】:

在使用 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();
            }
        });

    }

【问题讨论】:

  • ..什么??请细化您的问题,因为我不明白您的问题是什么..
  • 你在运行什么样的测试?除了验收/集成测试,你的测试应该是快速和独立的,你应该模拟/窥探/...你的边界,特别是网络请求
  • 我正在尝试在我的应用程序中测试登录功能,我在其中输入凭据并发送发布请求,服务器返回给我一个用户对象。所以在测试时我想等待接收这个用户对象,然后我可以验证用户凭据。那么在这种情况下如何让测试等待。
  • 请同时显示一些您尝试过的代码。
  • 现在有人可以取消货舱吗?

标签: android unit-testing wait


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2010-10-22
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多