【问题标题】:How can i write unit test for code that connected a device如何为连接设备的代码编写单元测试
【发布时间】:2013-08-04 22:11:38
【问题描述】:

我编写了一个连接设备的程序。

例如,我想测试reset 为设备发送重置请求(它不是HTTP 请求,它可以是套接字)的方法。(设备可以是任何东西)。 我不想测试请求只是想确保该方法正常工作。

在计算机编程中,单元测试是一种方法 源代码单元,一个或多个计算机程序模块的集合 连同相关的控制数据、使用程序和操作 程序,经过测试以确定它们是否适合使用。 [1] 直观地说,可以将一个单元视为一个单元中最小的可测试部分 应用。在过程编程中,一个单元可以是一个整体 模块,但更常见的是单个函数或过程。在 面向对象编程一个单元通常是一个完整的接口,例如 作为一个类,但可以是一个单独的方法。

我无法独立测试reset 方法(没有设备)。 我可以为reset 方法编写单元测试吗? 我该如何针对这些情况编写单元测试?

【问题讨论】:

    标签: c# unit-testing


    【解决方案1】:

    使用模拟库,例如:http://www.hibernatingrhinos.com/oss/rhino-mocks。然后,在单元测试中,您可以创建一个实现设备接口的模拟,并且您可以验证是否调用了特定方法(在本例中为重置)。

    【讨论】:

      【解决方案2】:

      您需要创建一个设备仿真系统,假设设备对您很重要,并且您确实需要知道您的代码是否可以使用它。

      “模拟”仅创建一个接口,而您的协议需要进行测试。例如,reset 方法需要非零时间量来使设备在物理上和逻辑上重置。模拟不会削减它。同样,设备在某些状态下只能接受某些命令;拥有支持模拟器的状态机通常很重要。

      您不需要在 C# 中实现您的设备模拟器;您只需要连接到设备模拟器。例如,有高度可定制的模拟系统,它们实现了状态机,并且可以由测试数据文件或脚本驱动。

      【讨论】:

      • “协议”是什么意思?在这种情况下,使用适当的参数调用设备接口的方法形成协议(一种与设备通信的方式)。因此,只要您想在理解中测试协议,我已经提到过模拟验证方法调用正是您所需要的。
      • 涉及设备的协议是基于值、状态和时间的。模拟库不测试这些东西。设备仿真需要产生好的值、坏的值和好看但不合适的值,以查看被测软件是否可以处理它们。仿真还需要及时响应,并且不及时响应——如果在重置期间设备断电会发生什么? ——测试是通过还是失败?还是正确恢复?类似的陈述适用于设备的状态。
      • 你是对的,这些都是重要的事情。但是,要针对坏、奇数和其他值测试软件,您不需要模拟设备 - 只需将这些值输入到创建的模拟中以由软件接收。您所说的是集成测试或黑盒测试。在单元测试中,您必须确保您只测试一件事。编写仿真软件是另一个错误的地方。这就是为什么,首先你需要一套好的 UNIT 测试。
      • 对于单元测试,您只需要测试协议的值部分。然而,单元测试是测试中最不感兴趣的部分,尽管单元测试对于软件的长期维护是必不可少的。测试状态机和时间依赖关系是您发现绝大多数错误的地方。
      • 1) 单元测试仅与价值有关的信息来源是什么? Wiki 定义没有提及它:en.wikipedia.org/wiki/Unit_testing。 AFAIK,您可以并且应该使用单元测试来测试活动。 2) 对不起,但你对什么是有趣和什么不感兴趣的感觉在这里无关紧要。作者的问题是关于单元测试的。
      猜你喜欢
      • 2013-06-02
      • 2020-06-25
      • 1970-01-01
      • 2019-02-12
      • 2015-03-30
      • 2012-10-28
      • 1970-01-01
      • 2018-01-09
      • 2016-09-28
      相关资源
      最近更新 更多