我正在努力学习Moq,但事实证明这有点困难。
如果我想在新的MVC3项目中使用nUnit和Moq为帐户控制器实现一些基本测试,我该怎么做呢?
我习惯了实体框架。但没有为它构建接口。
编辑: 我理解这一切的理论和做这件事的必要性,但实施它让我感到困惑
我一直在使用实体代码生成器(dbContext)来生成可用于接口的代码
答案 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方法只被调用一次。这是一个如何使用模拟检查帐户控制器是否按预期工作的示例。