【问题标题】:How do I Use Microsoft Fakes Shims to Unit Test tightly coupled classes in VB.NET 4 particularly for Constructors如何使用 Microsoft Fakes Shim 对 VB.NET 4 中的紧密耦合类进行单元测试,尤其是针对构造函数
【发布时间】:2013-09-06 20:48:07
【问题描述】:

Microsoft Fakes 是一个相对较新的框架,我对这个问题的所有方面也相对较新,所以我需要详细的答案。

我被赋予了“单元测试”一个应用程序的任务,我们将其称为旧版应用程序(由 Michael Feathers 定义),特别是使用 Microsoft Fakes 框架。我的经理建议使用 Fakes 的原因是它能够允许围绕外部依赖项和 API 进行单元测试,特别是删除数据库依赖项。

鉴于我在 VB.net、.NET 框架和单元测试方面的背景很薄弱,因此这项任务有些艰巨。无论如何,我想深入了解使用 SHIMS 来绕过这些内部类依赖项。我对 SHIMS 与更快、更容易实现的 STUBS 感兴趣的原因是,这个应用程序中没有接口(其他我相对不熟悉的东西。)并且接口是 STUB 所必需的。

现在,鉴于此背景,对于一个更具体的问题,我想帮助尝试对一个类进行单元测试,比如由“字符串名称”和类型“地址地址”组成的类 Person,并将这些用作构造函数参数。然后,我们可能会使用参数“string streetNumber”、“string street”和用户类型“state State”及其自己的参数构造地址类...

public class Person()

  Private mName As String
  Private mAddr As myclass.Address

   Public Sub New(ByVal name As string, ByVal addr As Address)
                      mName = name
                      mAddr = addr
  End Sub

还有其他地方……

public class Address()

  Private mStreet As String
  Private mState As myclass.State

   Public Sub New(ByVal street As String, ByVal state As State)
                      mStreet = street
                      mState = state
  End Sub

然后会有状态包含它包含的任何属性和方法......

所以,我想知道如何构建一个单元测试以将 Person 类与这些其他类(地址然后状态)隔离开来,这样如果它们处于开发或更改状态,Person 的单元测试仍然会通过.. 。 有什么建议么???

【问题讨论】:

  • Person 类已经通过 Constructor 的依赖注入与 Address 类解耦。如果 Address 的内部表示发生变化,Person 类不会改变。

标签: vb.net unit-testing microsoft-fakes


【解决方案1】:

目前您似乎没有任何耦合问题,但对 Fakes 的性质感到困惑。存根可用于任何可扩展或实现的类型,并且在可用时应优先于 shim,因为 shim 将您与实现细节联系得太紧密。

在地址中,我可能会传入一个 StubState,并将一个 StubAddress 传入 Person。常见的 TDD 实践要求您将 State 和 Address 设置为接口,以便在编写测试之前不需要任何外部代码,但在这种简单的类型上可能不值得(可能是结构?我不知道)对VB不太了解。)

您的目标应该是愚蠢的测试。只测试一件事的测试。在您的情况下,存根应该足以管理它,因为您已经在进行 DI。

shims 的主要用途是遗留代码,您无法获得依赖项。这并不意味着它们是一件好事,但有时它们正是您所需要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多