如何使用System.Web.Security.Membership里面的单元测试方法?

时间:2012-09-13 14:08:14

标签: c# mocking moq

我想测试一种方法来检查它是否正确保存了一个事务。在其内部调用Membership.GetUser()来验证每次导致测试失败的用户。有没有办法模拟这个,以便Membership.GetUser()总是返回一个有效的名称?

我正在使用Moq,C#和ASP.Net 4.5 MVC

2 个答案:

答案 0 :(得分:5)

总之,你不能。这就是为什么每次调用这种“服务”都应该隐藏在抽象背后的原因。

您可以在默认的MVC模板中看到该示例。

答案 1 :(得分:3)

是的,就像Serg所说,你可以通过提供实际服务的接口来模拟这个。此接口将具有您正在调用的公共方法,例如:

public interface IMyServiceInterface
{
    IMembershipUser GetUser();
    // other methods you want to use...
}

在您的单元测试中,您会说:

var mockService = new Mock<IServiceInterface>();
mockService.Setup(mock => mock.GetUser()).
    Returns(new MembershipUserImplementation("MyTestUser", otherCtorParams));

在我的例子中,我将为MembershipUser创建一个包装器,看起来它也需要在抽象之后。