当我必须制作一个包装器和界面来伪造我的测试时,我仍然感到困惑。
就像我正在读的关于MVC的书一样,作者使用了Moq框架。
因此作者首先制作了一个IFormAuthentication接口。
在那里编写一些方法,然后创建一个实现这些方法的WrapperClass,然后编写方法的实际代码(即注销)。
然后在Moq他只使用界面。所以这对我来说很有意义,但如果我错了,请纠正我。
他这样做是因为他希望moq通过使用界面制作假模型?然后在MVC应用程序中,他让它升级,这样如果接口为null,它将创建一个新的包装类。
所以我猜这是真的,当它真正运行它时,使用实际包含真实方法的包装器,以便应用程序能够正常工作。
所以希望我做对了。
现在他继续做会员资格,他说的是“看看我需要用接口实现多少方法(我也猜测他也会制作一个包装器)”。
相反,我们会让Moq去做,然后他转到Moq MembershipProvider并创建所有这些东西。
所以我的问题是他怎么知道的?就像它是如何一方面你不能以这种方式做FormsAuthentication方法但你可以做MembershipProvider?
我甚至认为你不能像会员一样成为会员提供者。
那么我从哪里获得这些信息?就像我想做我的SMTP(MailMessage),我想知道我是否必须编写一个接口,然后是一个包装器,还是可以像MembershipProvider那样做同样的事情?
我不确定我不知道怎么说。
由于
答案 0 :(得分:0)
作者没有为MembershipProvider提取接口的原因是因为它已经是一个抽象类,所以它已经作为Test Double提供了出色的服务。
换句话说:只有当你想抽象出一个不在你控制之外的类时,才需要提取一个接口。在这种情况下,您可以创建一个包装实际实现的适配器,同时仍然提供用Test Double替换实际实现的能力。
对于抽象,具有虚拟成员的接口和基类在概念上是等效的。
您可以在优秀xUnit Test Patterns中了解有关测试双打的更多信息。