4

我正在学习在 Android 上通过低功耗蓝牙进行通信。这是一个示例应用程序

源代码中有几个与蓝牙相关的对象,它们显然是最终类:

private BluetoothManager mBluetoothManager;
private BluetoothAdapter mBluetoothAdapter;
private BluetoothGatt mBluetoothGatt;

当然,我不想测试 BluetoothManager、BluetoothAdapter 或 BluetoothGatt 本身之类的库内容。但我想测试BluetoothLeService : Service那个项目中写的。

我不知道,如何模拟这些final BluetoothManager, BluetoothAdapter or BluetoothGatt对象。

  1. 我该如何测试BluetoothLeService
  2. 我可以写普通test的 unit 还是需要androidTests在测试期间在设备连接的地方写特殊的 s?
  3. 当我将集成系统作为构建环境时,这会是什么样子?
4

1 回答 1

0

当您的设备实际连接到另一个蓝牙设备时,您应该进行一些测试。

  • 确保您已经实现了与真正的蓝牙设备正确通信的样板代码。
  • 确保您正在读取/写入设备预期的正确特性。

大多数代码都是样板代码,并且在任何使用蓝牙的应用程序中都是相同的。差异将是:

  • 服务、特性以及更新或从蓝牙设备读取信息的内容/时间。

所以我会把你的测试分成两部分:

  • 简单地连接到蓝牙设备并从设备读取和写入的代码。此代码模块应可在任何应用程序中重复使用,并且不应包含任何应用程序独有的业务逻辑。这样,只有在更改此代码模块时,您才需要使用真实设备进行测试。

  • 您的应用程序独有的代码。这包括从蓝牙设备读取/写入信息后执行的所有业务逻辑。在这里,您可以编写一个模拟类,假装是您从中读取/写入信息的蓝牙设备。它可以充当应用程序特有的业务逻辑与实际连接蓝牙设备并与之交互的代码之间的一层。在您的自动化测试期间,它假装提供从蓝牙设备读取的模拟数据。当您想使用真实设备进行测试时,切换一个标志,并使用我在上一个要点中提到的代码让它读取和写入真实的蓝牙设备。

示例应用程序中的大部分代码都是样板代码。您应该从中删除任何您的应用程序不需要的无关内容,并将其用作应用程序中与您的业务逻辑通信的层。

于 2020-08-14T16:03:55.280 回答