【问题标题】:How to Mock BluetoothAdapter.ACTION_REQUEST_ENABLE如何模拟 BluetoothAdapter.ACTION_REQUEST_ENABLE
【发布时间】:2013-11-22 12:13:53
【问题描述】:

我正在尝试使用必须测试的以下代码来解决问题: 我正在使用 Mockito 和 Robotium 来解决大多数测试用例。 问题是通过以下方式启动的请求对话框来模拟用户的回答:

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, BluetoothAdapterService.REQ_BT_ENABLE);

答案被缓存

protected void onActivityResult(int requestCode, int resultCode, Intent data) {     

    if (requestCode == 1) {                                                             /*TODO: für 1 eine Konstante verwenden, hier und in der aufrufenden Funktion*/
        if (resultCode ==   BluetoothAdapterService.REQ_BT_ENABLE) {                    /*TODO RequestCode == ResultCode dh. der COde kann hier optimiert werden*/
            btAdapterService.setBluetoothState(BluetoothAdapterService.ON);
        }
        else {
            btAdapterService.setBluetoothState(BluetoothAdapterService.OFF);            /* Wenn keine Verbindung aufgebaut werden konnte, oder die Aktivierungsaufforderung des -> */                                                                           /* BT-Adapters mit nein quittiert wurde, ist der resultCode = RESULT_CANCELD = 0 */
        }
    }
}

我已经尝试了一些解决方案来获得在测试期间显示的按钮被点击,但是虽然我使用的是机器人我无法访问按钮

solo.clickOnText("No");

是否也可以将请求粘贴到另一个类并为其调用方法?这样我就可以以不同的方式重用请求?我试过了,但后来我遇到了没有请求出现的问题,我得到了一个例外。

我不是一个深度程序员,我已经开始了解这个话题。我将不胜感激。

【问题讨论】:

  • 你打算用蓝牙适配器做什么?
  • 根据蓝牙状态,用户会获得上面列出的用户对话框来激活 BT。它是由意图开始的。当我得到这个对话框时,我希望能够通过回调函数选择打开或关闭。也许 Robotium 有一个更简单的方法,但直到现在我还没有找到这个特殊的对话框和他的按钮。
  • 所以你要打开/关闭蓝牙吗?
  • 是的,通过请求的意图。蓝牙适配器的转码是已知的。我不明白如何对蓝牙适配器自己给出的用户对话框做出反应(API 谈论系统活动)。

标签: android mocking android-activity mockito robotium


【解决方案1】:

我不知道你测试的目的是什么。至于我,听起来您想确保您的代码正确处理用户的答案。

所以对我来说,只需拨打onActivityResult(1,BluetoothAdapterService.REQ_BT_ENABLE) 并在启用蓝牙后检查即可。

【讨论】:

  • 只执行 onActivityResult(1,BluetoothAdapterService.REQ_BT_ENABLE) 并不能解决问题,因为在测试上下文中 onActivityResult 是未知的。所以也许你的意思是 mActivity.onActivityResult(1, 1, new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)); 但要使用它,我需要删除受保护的声明,然后它仍然不起作用。
  • 当然你可以创建一个调用受保护方法的公共函数。但这对于测试类来说已经很多了。我正在写答案如何通过单元测试来做到这一点。我没有太多的仪器测试经验
  • 好的。我也可以在单元测试下尝试。我会尽快报告。
  • 好的,单元测试可能是解决方案。我可以通过调用回调
  • mActivity.onActivityResult(1, 1, new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)); 这是一个可接受的解决方案。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2014-07-01
  • 1970-01-01
相关资源
最近更新 更多