Microsoft Fakes是一个相对较新的框架,我对这个问题的所有方面也相对较新,所以我需要详细解答。
我被赋予了“单元测试”应用程序的任务,我们将其称为旧应用程序(由Michael Feathers定义),尤其是Microsoft Fakes框架。我的经理建议Fakes的原因是它能够允许围绕外部依赖和API进行单元测试,特别是删除数据库依赖。
鉴于我在VB.net,一般的.NET框架以及一般的单元测试中都有弱背景,这个任务有点压倒性。无论如何,我想深入了解如何使用SHIM来绕过这些内部类依赖。我对SHIMS感兴趣的原因是速度更快,更容易实现的STUBS是因为这个应用程序中没有接口(我不太熟悉其他东西。)并且STUB需要接口。
现在,对于这个背景下的一个更具体的问题,我想帮助尝试单元测试一个类,比如由“字符串名称”和类型“地址地址”组成的类Person,并将它们用作构造函数参数。然后,我们可能会使用参数“string streetNumber”,“string street”以及具有自己的参数的用户类型“state State”来构造类Address ...
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与其他类隔离,(地址然后状态),这样如果它们在dev或更改下,Person的单元测试仍将通过.. 。 有什么建议???
答案 0 :(得分:0)
目前你似乎没有任何耦合问题,但对Fakes的性质感到困惑。存根可用于任何可以扩展或实现的类型,并且在可用时应优先于垫片,因为垫片与实现细节过于紧密相关。
在地址中,我可能会传入一个StubState,并传入一个StubAddress。常见的TDD实践要求你将State和Address设置为接口,这样在编写测试之前就不需要任何外部代码了,但是对于这类简单的类型可能不值得(可能是结构化的?我不知道我很清楚VB。)
你的目标应该是愚蠢的测试。只测试一件事的测试。在您的情况下,存根应该足以管理它,因为您已经在进行DI。
shims的主要用途是遗留代码,在这里您无法获得依赖项。这并不意味着它们是好事,但有时它们就是你所需要的。