我想测试一种方法来检查它是否正确保存了事务。在它内部调用 Membership.GetUser() 来验证每次导致测试失败的用户。有没有办法模拟这个,以便 Membership.GetUser() 总是返回一个有效的名称?
我正在使用起订量、C# 和 ASP.Net 4.5 MVC
简而言之,你不能。这就是为什么对这种“服务”的每次调用都应该隐藏在抽象之后的原因。
您可以在默认 MVC 模板中看到该示例。
是的,就像 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 创建一个包装器,并且它似乎也需要在抽象之后。