代码之家  ›  专栏  ›  技术社区  ›  Antoine Claval

模拟框架模拟各种物理设备的相关性和好处

  •  1
  • Antoine Claval  · 技术社区  · 16 年前

    模拟框架是一个好主意,可以与几个物理设备一起工作,并模拟它们吗?

    我公司的主要目标是将我们的软件与多个品牌的影院放映机(Barco,Sony…)连接起来。,声音处理器,IO控制器(barionet,wago)。

    有时供应商提供了一个用于通信的API,有时是通过套接字完成的,有时是真正的“特定于供应商”

    到目前为止,我们的方法是:

  • -如果简单的话:写一个虚拟的“devicexxxmock”类,听命令,在每个问题上回答“是”。
  • -使用空灵或大力神
  • -如果确实需要:编写模拟器(与第一个方法相同,但回答“是”或“否”,这取决于我们想要测试什么)
  • 我们正在寻找一种一致的方法来测试我们的代码,而不需要真正的设备。而且不会浪费时间编写模拟器。

    编辑: 我们讨论4种设备:

  • 我们必须在套接字中的字节数组中进行对话来应答的大多数设备。
  • 一些使用 SNMP
  • 有些启用了HTTP( http://ip/commandToExecute )
  • 在Java中有些API
  • 5 回复  |  直到 16 年前
        1
  •  2
  •   Brian Genisio    16 年前

    是啊。我认为这是一个模仿框架的完美地方。只需创建一个接口层,将硬件(或硬件API)与控制它的代码分离…iProjector、IsoundProcessor等。

    一旦将硬件与软件分离,并且不直接依赖于硬件,就可以使用模拟框架来编写模拟或存根,假装iProjector是真正的硬件。如果您知道Hardwarex用一个特定的值响应某个方法,那么捕获它并用模拟框架返回它。

    请注意,不需要模拟框架本身。你可以像你建议的那样创建一个假代码,但是有时候这个假代码会变得太复杂,因为它们被太多的测试所使用,你会在你的假代码中发现错误。在这种情况下,mocking框架会出现,您只能定义您在特定测试中需要的行为…

        2
  •  1
  •   bm212    16 年前

    正如布莱恩·吉尼西奥(BrianGenisio)所说,这听起来是模拟游戏的完美候选,而他关于模拟游戏和模拟游戏的论点非常引人注目。我没有使用mock来测试与硬件的交互,但是我使用它们来测试与供应商提供的第三方本地API的接口,这是一个非常相似的用例。一般的模式是: -具有一个接口,该接口可以销售一个表示本机API(或本例中的硬件设备)生成的输入的对象。 -模拟它以生成测试用例所需的输入 -断言您的代码以正确的方式处理此输入

    这样,您就可以在不使用实际硬件(或供应商API或其他代码等)的情况下测试您的功能。模拟对象不仅适用于测试与硬件或第三方API的交互,还可以用于各种测试。一旦你开始使用mock,你会想知道你是如何在不使用它们的情况下编写代码的。

    我用Java编写代码,使用JUnit作为测试框架,并使用了EasyMoCK( http://easymock.org 和JMock( http://www.jmock.org )我更喜欢(并且目前使用)jmock,但这两种方法都值得尝试,因为它们的哲学是相当不同的。我也听说过这种嘲讽( http://mockito.org )很好,但还没有真正用在愤怒中。

        3
  •  0
  •   Brian    16 年前

    将“是”替换为 self.Responder.Next() . 传入类实例(取决于您的语言), Responder 给你的模仿者的构造者。琐碎的实现 Next return "yes"; 但你也可以让它返回其他东西,这取决于它是如何构造的。这种技术的实际细节将根据模仿者使用的语言而有所不同。

        4
  •  0
  •   Kyle Simek    16 年前

    不要模仿设备。我曾经嘲笑过我的烤面包机,它试图把我的房子点着。这不值得冒险,伙计。

        5
  •  0
  •   Steve Freeman    16 年前

    一家名为Atomic Object的公司有一些关于在使用嵌入式设备时在C中使用模拟对象的好报告。看报纸在 http://www.atomicobject.com/pages/Papers