MVC3 Moq帐户控制器c#nUnit

时间:2011-09-20 18:21:45

标签: asp.net-mvc nunit moq

我正在努力学习Moq,但事实证明这有点困难。

如果我想在新的MVC3项目中使用nUnit和Moq为帐户控制器实现一些基本测试,我该怎么做呢?

我习惯了实体框架。但没有为它构建接口。

编辑: 我理解这一切的理论和做这件事的必要性,但实施它让我感到困惑

我一直在使用实体代码生成器(dbContext)来生成可用于接口的代码

1 个答案:

答案 0 :(得分:0)

好的,这是一个很好的测试:当你注册一个新用户时,你想确保他将自动在网站上签名,所以他不需要再次输入他的用户名和密码。

测试将是这样的:

public void AutomaticallySignedInAfterRegistering()
{
    var membershipService = new Mock<IMembershipService>();
    var formsService = new Mock<IFormsAuthenticationService>();
    RegisterModel newUser = new RegisterModel();
    newUser.UserName = "John"
    newUser.Email = "john@somewhere.com"
    newUser.Password = "p@ss";
    newUser.ConfirmPassword = "p@ss";

    membershipService.Setup(x => x.CreateUser("John", "p@ss", "john@somewhere.com")).Returns(MembershipCreateStatus.Success);

    AccountController controller = new AccountController();
    controller.FormsService = formsService.Object;
    controller.MembershipService = membershipService.Object;

    controller.Register(newUser);

    formsService.Verify(x => x.SignIn("John", false), Times.Once());
} 

这里的关键是验证方法。它就像Assert一样工作。在这种情况下,您将验证SignIn方法只被调用一次。这是一个如何使用模拟检查帐户控制器是否按预期工作的示例。