0

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 的单元测试仍然会通过......任何建议???

4

1 回答 1

0

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

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

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

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

于 2013-10-14T19:08:23.377 回答