我正在尝试构建一个库,该库可以使用蓝牙与其他设备进行通信
为了实现此目的,我创建了一个这样的接口:
interface IBluetoothAdapter {
....
}
在正常运行中,我像这样使用:
internal class BTAdapter : IBluetoothAdapter {
private val mAdapter = BluetoothAdapter.getDefaultAdapter()
}
我用它将消息发送到实际的蓝牙适配器
当我进行测试时,我会模拟Ibluetoothadapter,这起作用了
为了促进上述我的实际班级具有此实现:
class Communicator(val address:String) {
private var mAdapter: IBluetoothAdapter = BTAdapter()
@VisibleForTesting
@TestOnly
fun setAdapter(adapter: IBluetoothAdapter) {
mAdapter = adapter
}
.....
}
有更好的方法吗?
基本上我想做的是应用程序在测试中运行以始终使用一个特定类(模拟(以及正常运行以始终使用另一个(我创建的一个(
您的代码在做什么称为dependency_infoction
有更好的方法吗?
没有一种"更好"的方法可以做到这一点,但是有不同的方法可以取决于您使用的工具(请参阅为什么Do-do-i-i-n-ioc-container-有关详细信息(
我会以相同的方式实现它,因为您的代码可以在没有任何DI容器的情况下使用,因此它具有较少的外部依赖项。