2011-09-20 61 views
0

我正在尝试学习Moq,但它证明有些困难。MVC3 Moq账户控制器c#nUnit

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

我用于实体框架。但不为其构建接口。

编辑: 我明白这一切,需要做它的理论,但是做起来是混淆了我

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

回答

0

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

的测试将是这样的:

public void AutomaticallySignedInAfterRegistering() 
{ 
    var membershipService = new Mock<IMembershipService>(); 
    var formsService = new Mock<IFormsAuthenticationService>(); 
    RegisterModel newUser = new RegisterModel(); 
    newUser.UserName = "John" 
    newUser.Email = "[email protected]" 
    newUser.Password = "[email protected]"; 
    newUser.ConfirmPassword = "[email protected]"; 

    membershipService.Setup(x => x.CreateUser("John", "[email protected]", "[email protected]")).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方法只被调用一次。这是一个如何使用mocks来检查帐户控制器是否按预期工作的示例。

+0

谢谢,听起来像是一个很好的测试开始。但有一个问题,为我的EDMX实体框架实体创建接口最简单的方法是什么?我安装了“DBContext生成器”,但它不创建接口,仅为每个实体创建类(然而,所有正确的函数都存在) – JustAnotherDeveloper

+0

将DbContext包装在自定义类中。我通常会使用'IDbContext'和一个名为'EntityFrameworkDbContext'的类。这个类将在内部使用在EDMX上创建的DbContext。所有的控制器和服务都将使用IDbContext。 – goenning