如何使用 Microsoft Fakes 填充码对 VB.NET 4 中的紧密耦合类进行单元测试,特别是对于构造函数



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

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

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

现在,对于给定此背景的更具体的问题,我希望帮助尝试对类进行单元测试,例如由"字符串名称"和键入"地址地址"组成的类 Person,并将其用作构造函数参数。然后,我们可以用参数"string streetNumber"、"string street"构造类 Address,以及一个带有自己的参数的用户类型"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 的单元测试仍将通过......任何建议???

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

在地址中,我可能会传入一个存根状态,并传入一个人的存根地址。常见的TDD实践会要求您将状态和地址放入接口中,以便在编写测试之前不需要任何外部代码,但是对于如此简单的类型(可能是结构体?我不太了解 VB。

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

填充程序的主要用途是遗留代码,您无法在其中获取依赖项。这并不意味着它们是一件好事,但有时它们是您需要的。

最新更新