我如何判断何时需要编写自己的Interface和Wrapper进行单元测试?

时间:2009-06-28 08:50:26

标签: c# unit-testing

当我必须制作一个包装器和界面来伪造我的测试时,我仍然感到困惑。

就像我正在读的关于MVC的书一样,作者使用了Moq框架。

因此作者首先制作了一个IFormAuthentication接口。

在那里编写一些方法,然后创建一个实现这些方法的WrapperClass,然后编写方法的实际代码(即注销)。

然后在Moq他只使用界面。所以这对我来说很有意义,但如果我错了,请纠正我。

他这样做是因为他希望moq通过使用界面制作假模型?然后在MVC应用程序中,他让它升级,这样如果接口为null,它将创建一个新的包装类。

所以我猜这是真的,当它真正运行它时,使用实际包含真实方法的包装器,以便应用程序能够正常工作。

所以希望我做对了。

现在他继续做会员资格,他说的是“看看我需要用接口实现多少方法(我也猜测他也会制作一个包装器)”。

相反,我们会让Moq去做,然后他转到Moq MembershipProvider并创建所有这些东西。

所以我的问题是他怎么知道的?就像它是如何一方面你不能以这种方式做FormsAuthentication方法但你可以做MembershipProvider?

我甚至认为你不能像会员一样成为会员提供者。

那么我从哪里获得这些信息?就像我想做我的SMTP(MailMessage),我想知道我是否必须编写一个接口,然后是一个包装器,还是可以像MembershipProvider那样做同样的事情?

我不确定我不知道怎么说。

由于

1 个答案:

答案 0 :(得分:0)

作者没有为MembershipProvider提取接口的原因是因为它已经是一个抽象类,所以它已经作为Test Double提供了出色的服务。

换句话说:只有当你想抽象出一个不在你控制之外的类时,才需要提取一个接口。在这种情况下,您可以创建一个包装实际实现的适配器,同时仍然提供用Test Double替换实际实现的能力。

对于抽象,具有虚拟成员的接口和基类在概念上是等效的。

您可以在优秀xUnit Test Patterns中了解有关测试双打的更多信息。