gpt4 book ai didi

java - 为 Android 单元测试模拟 WifiManager

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:07:12 25 4
gpt4 key购买 nike

我正在尝试为几个依赖 WifiManager 和返回的 ScanResults 的类实现一些单元测试。我想要做的是能够控制我收到的 ScanResults,以便测试各种不同的条件。

不幸的是,我很难成功模拟 WifiManager(尽管我想我可以在我的 MockWifiManager 中传递它的构造函数空引用)。这将只是我的第一个问题,因为一旦我有一个 MockWifiManager 可以玩(如果它能工作!)我将必须成功创建我的测试 ScanResults,它没有公共(public)构造函数(想象它是由某个地方的某个工厂创建的)。

问题:如果它没有公共(public)构造函数,我什至可以扩展它吗?

我是不是做错了?我经常被问到关于如何完成特定任务的问题,但实际上他们试图以错误的方式解决不同的问题,也许这就是我在这里所做的?

我是 android 的新手,所以至少要模拟所有这些功能一直在努力。

感谢您的投入!

编辑:我也很难实例化 MockWifiManager。 wifi 管理器的构造函数期望 IWifiManager 是一种在 Android SDK 中似乎不存在的类型。

最佳答案

围绕 WifiManager 创建一个抽象。用这个来 mock 你。 mock 你不拥有的东西是坚硬而脆弱的。如果做得好,您应该能够切换内部结构,而且您最终会得到一个更好的可模拟 API。

对于您的测试,您可以对经理进行 stub /伪造,让您心满意足。对于生产,您将传递一个具体实例。

关于您关于更改代码只是为了使其可测试的观点是不正确的。首先,您应该模拟角色而不是类型,如下文所述。谷歌了解更多信息。

其次,围绕第三方代码创建抽象是 SOLID 中依赖倒置原则所述的最佳实践。无论您是否进行单元测试,您都应该始终依赖于抽象而不是具体的实现。

http://www.objectmentor.com/resources/articles/dip.pdf http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

关于java - 为 Android 单元测试模拟 WifiManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com