我想测试一个方法来检查它是否正确地保存了事务。里面叫会员制。GetUser()来验证每次导致测试失败的用户。有没有什么方法可以嘲笑这样的会员资格。GetUser()总是返回一个有效的名称?
我使用的是Moq、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创建一个包装器,因为它似乎也需要在抽象后面。