9

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

我正在使用起订量、C# 和 ASP.Net 4.5 MVC

4

2 回答 2

5

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

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

于 2012-09-13T14:09:57.970 回答
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 创建一个包装器,并且它似乎也需要在抽象之后。

于 2012-10-01T20:12:58.890 回答