2011-09-20 44 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