首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Moq MembershipProvider

Moq MembershipProvider
EN

Stack Overflow用户
提问于 2013-01-23 02:50:34
回答 1查看 656关注 0票数 0

我正在尝试使用Moq来模拟MembershipProvider。我得到以下错误

{“访问路径'C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 11.0\

我猜我没有正确地模仿MembershipProvider。通常我做一个mock.Object()来获得新的模拟对象,但是我不确定如何处理我的模拟MembershipProvider。

代码语言:javascript
复制
[TestMethod]
public void LogUserIntoSystem_post_CorrectUsernameAndPassword()
{
    var model = new LoginModel
    {
        LoginName = "Bobby",
        Password = "bob",
        RememberMe = true
    };

    var membership = new Mock<MembershipProvider>();
    membership.Setup(x => x.ValidateUser("Bobby", "bob")).Returns(true);
    var controllerUnderTest = _testModel.ReturnController();

    //act
    controllerUnderTest.Login(model, string.Empty);

    //assert
    var actionResult = (RedirectToRouteResult)controllerUnderTest.Home();
    Assert.AreEqual("Home", actionResult.RouteValues["action"]);
    Assert.AreEqual("P", actionResult.RouteValues["controller"]);
}
EN

回答 1

Stack Overflow用户

发布于 2013-02-17 22:09:11

我看不到您在哪里使用MembershipProvider

因此,从外到内,看起来控制器实际上使用的是真实的或具体的MembershipProvider。在检查了MSDN之后,这个类是一个抽象基类,所以Moq应该可以和这个类一起使用,尽管我会推荐一种不同的方法。

代码语言:javascript
复制
class TwistedInfernosMembershipProvider : IMembershipProvider
{
    public bool ValidateUser(string username, string password) 
    { 
        // Call the real .NET membership provider here...
    }
}

然后,在您的控制器中,我将执行以下操作:

代码语言:javascript
复制
var testProvider = new Mock<IMembershipProvider>();
testProvider.Setup(x => x.ValidateUser("Bobby", "bob").Returns(true);
var subject = new ControllerUnderTest(testProvider.Object());

通过这样做,您已经抽象了如何验证用户的细节。您可以将此实现切换到任何实现IMembershipProvider的类,您的代码或测试甚至都不会关心。这也意味着你可以很容易地用这个抽象测试你的控制器。请记住,Moq需要一个接口或基类/虚方法才能正常工作。

查看这篇关于为什么你应该使用mock roles, and not objects的文章,了解更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14465860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档