0
我正在嘗試學習Moq,但它證明有些困難。MVC3 Moq賬戶控制器c#nUnit
如果我想在新的MVC3項目中爲帳戶控制器使用nUnit和Moq進行一些基本測試,我該怎麼做?
我用於實體框架。但不爲其構建接口。
編輯: 我明白這一切,需要做它的理論,但是做起來是混淆了我
我一直在使用實體代碼生成器(的DbContext)來生成代碼,我可以使用接口
我正在嘗試學習Moq,但它證明有些困難。MVC3 Moq賬戶控制器c#nUnit
如果我想在新的MVC3項目中爲帳戶控制器使用nUnit和Moq進行一些基本測試,我該怎麼做?
我用於實體框架。但不爲其構建接口。
編輯: 我明白這一切,需要做它的理論,但是做起來是混淆了我
我一直在使用實體代碼生成器(的DbContext)來生成代碼,我可以使用接口
好的,這是一個很好的測試:當你註冊一個新用戶時,你要確保他會在網站上自動登錄,所以他不需要再次輸入他的用戶名和密碼。
的測試將是這樣的:
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來檢查帳戶控制器是否按預期工作的示例。
謝謝,聽起來像是一個很好的測試開始。但有一個問題,爲我的EDMX實體框架實體創建接口最簡單的方法是什麼?我安裝了「DBContext生成器」,但它不創建接口,僅爲每個實體創建類(然而,所有正確的函數都存在) – JustAnotherDeveloper
將DbContext包裝在自定義類中。我通常會使用'IDbContext'和一個名爲'EntityFrameworkDbContext'的類。這個類將在內部使用在EDMX上創建的DbContext。所有的控制器和服務都將使用IDbContext。 – goenning