当前位置: 首页 > 面试题库 >

模拟WifiManager进行Android单元测试

公孙智
2023-03-14
问题内容

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

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

问题:由于没有公共构造函数,我什至可以扩展它?

我要把这都弄错了吗?我经常被问到有关如何执行特定任务的问题,但实际上他们是在尝试以错误的方式解决其他问题,也许这就是我在这里所做的事情?

我对android非常陌生,因此不得不模拟所有这些功能,至少可以这样说。

感谢您的投入!

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


问题答案:

围绕WifiManager创建一个抽象。使用它进行嘲笑。嘲笑您不拥有的东西既困难又脆弱。如果做得对,您应该能够切换内部构造,并且最终会得到更好的可模拟API。

为了进行测试,您可以对管理者进行混搭/伪造。对于生产,您将传递一个具体实例。

关于更改代码只是为了使其可测试这是不正确的。首先,您应该模拟角色,而不是下面的论文中讨论的类型。Google以获得更多信息。

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

http://www.objectmentor.com/resources/articles/dip.pdf


html" target="_blank">http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod



 类似资料:
  • 问题内容: 嗨,我真的希望您能为我提供帮助,我感觉我已经把头发拉了好几天了。 我正在尝试为方法A编写单元测试。方法A调用静态方法B。我想模拟静态方法B。 我知道以前已经有人问过这个问题,但是我觉得Android从那时起已经成熟,并且必须有一种方法可以执行如此简单的任务,而无需重写我要测试的方法。 这是一个示例,首先是我要测试的方法: 接下来,我要模拟的静态方法: 在其他语言中,这是如此简单,但我无

  • 我有一个示例方法(我需要编写测试用例)如下所示, 我想模拟getConfig方法并返回一个特定的字符串值。getConfig是Kotlin对象中方法,如下所示, 下面是我尝试的测试 我没有得到任何错误,但是getConfig方法没有被嘲笑。执行实际的实现。我也试过使用Powermockito。请帮帮我

  • 如果我错了请纠正我,但看起来Moq只能模拟一个公共类,它有一个公共的无参数构造函数,要模拟的方法是。我并不想让这些类公开可见。我是不是错过了一些与Moq的东西,或者只是不适合我想做的事情? 我想我可以创建一个ClassB实现的接口(例如“ICLASSB”),将其注入ClassA,并模拟该接口。ClassB仍然可以是内部的(尽管我意识到接口方法必须是公共的)。虽然这可以工作,但我对创建大量接口感到不

  • Spock对存根和模拟做了很强的区分。当要更改的内容从被测试类使用的类返回时,请使用存根,这样您就可以测试if语句的另一个分支。使用mock,当您不关心测试中的类返回什么时,只需调用另一个类的另一个方法,并且您希望确保调用了该方法。很整洁。然而,假设您有一个具有流利API的构建器,它使人们。您希望测试调用此生成器的方法。 所以最初,我想只是模拟构建器,然后myMethod()的单元测试应该检查具有

  • 使用Android Studio进行单元测试 原文链接 : Unit Testing With Android Studio 原文作者 : Rex St John 译文出自 : 开发技术前线 www.devtf.cn 译者 : ZhaoKaiQiang 校对者: zhengxiaopeng 状态 : 校对完 这篇文章介绍了在Android Studio中进行单元测试的基础部分。 很多教程都指导你应

  • 我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient