代码之家  ›  专栏  ›  技术社区  ›  MunkiPhD

如何测试执行内部操作的引用类?

  •  1
  • MunkiPhD  · 技术社区  · 15 年前

    如何测试以下代码?

       Public Sub SetSerialIdForDevice()
           Try
               Dim component As Object = container.getComponentRef("componentInterface")
               If component IsNot Nothing Then
                   component.SetupDeviceSerialID(container.serialNumbers)
               Else
                   serialfound = False
               End If
               Catch ex As Exception
                '' error handling
           End Try
       End Sub
    

    项目引用(或在此处调用的组件)在运行时加载到单个“容器”中。我们通过使用 container.getComponentRef("< name of component we're looking for >") . 然后,我们在此组件上调用一个方法来设置串行ID,该ID存储在容器对象的属性中。

    在setupdeviceSerialid()方法中,我们调用“容器”(例如它是内部调试模式)以及一些其他对象的本机属性。在对象中有对象的情况下,测试这个场景的最佳方法是什么?为了隔离setupdeviceSerialid()的测试,我们会模拟所有调用、属性和对象吗?

    还是我们嘲笑 'componentInterface' 那就回来了,嘲笑电话 SetupDeviceSerialID() 然后测试在 设置设备序列号() ?

    编辑

    我一直在考虑测试这个错误(很明显),通过这些答案,我开始意识到我正试图把代码中执行得更深的方法的测试塞进setserialidfordevice()方法的测试中。

    因此, 如果找到一个序列号,我们会设置 serialfound = true 里面 设置设备序列号() .
    这是我们要在这里测试的东西吗(因为我们要测试 serialfound=false )或在测试中 设置设备序列号() ?我们能创建一个测试来看看 设置设备序列号() 实际上存在于“componentInterface”组件上?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mark Seemann    15 年前

    道德观念 接缝 您可以将代码放入代码中,这样测试起来就越容易。

    如果可以替换 getComponentRef 方法使用一个测试double,可以编写一个测试来验证是否正确调用了此方法,然后继续编写其他验证其他内容的单元测试。

    理想情况下,您应该只编写一个测试来测试任何特定的行为。

    假设您可以替换 component 变量和一个测试double,然后可以验证是否正确调用了SetupDeviceSerialid方法。

    这样,以及一些测试错误路径的tet,应该得出setserialidfordevice方法的测试套件。

    然后,您可以继续编写一组新的测试,以验证特定的“组件”实现是否按预期工作,但这些测试将是独立于运行setserialidfdevice方法的测试的独立测试。

        2
  •  2
  •   cfeduke    15 年前

    我会嘲笑 container 拥有 getComponentRef 返回方法可以测试的模拟对象。模拟每个“componentInterface”类需要在它们自己的专用单元测试中发生。不要因为方便而把测试职责结合起来,把所有的东西都作为自己的单元来保存,这样就没有单元测试依赖于另一个测试。