我正在尝试建立一个可帮助我的应用程序使用蓝牙与其他设备进行通信的库
为了实现这一点,我创建了一个像这样的界面:
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
}
.....
}
有更好的方法吗?
基本上,我想做的是当应用程序在测试中运行时始终使用一个特定的类(模拟),而在正常运行时始终使用另一个特定的类(我创建的类)
答案 0 :(得分:0)
您的代码在做什么叫Dependency_injection
有更好的方法吗?
没有一种“更好”的方法来执行此操作,但是有不同的方法来执行此操作,具体取决于您使用的工具(有关详细信息,请参见why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code。)
我将以与您相同的方式来实现它,因为您的代码可以在没有任何di容器的情况下使用,因此它具有更少的外部依赖性。