Asp.net-Mvc

ASP.NET MVC - 單元測試矯枉過正?(TDD)

  • January 1, 2015

所以我開始發現 TDD 錯誤,但我想知道我是否真的做對了……我似乎正在編寫很多測試。

當然,測試越多越好,但我有一種感覺,我已經結束了。老實說,我不知道我能堅持寫這些簡單的重複測試多久。

例如,這些是來自我的 AccountController 的 LogOn 操作:

public ActionResult LogOn(string returnUrl)
{
   if (string.IsNullOrEmpty(returnUrl))
       returnUrl = "/";

   var viewModel = new LogOnForm()
   {
       ReturnUrl = returnUrl
   };

   return View("LogOn", viewModel);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(LogOnForm logOnForm)
{
   try
   {
       if (ModelState.IsValid)
       {
           AccountService.LogOnValidate(logOnForm);

           FormsAuth.SignIn(logOnForm.Email, logOnForm.RememberMe);

           return Redirect(logOnForm.ReturnUrl);
       }
   }
   catch (DomainServiceException ex)
   {
       ex.BindToModelState(ModelState);
   }
   catch
   {
       ModelState.AddModelError("*", "There was server error trying to log on, try again. If your problem persists, please contact us.");
   }

   return View("LogOn", logOnForm);
}

很不言自明。

然後我有以下一組測試

public void LogOn_Default_ReturnsLogOnView()
public void LogOn_Default_SetsViewDataModel()
public void LogOn_ReturnUrlPassedIn_ViewDataReturnUrlSet()
public void LogOn_ReturnUrlNotPassedIn_ViewDataReturnUrDefaults()
public void LogOnPost_InvalidBinding_ReturnsLogOnViewWithInvalidModelState()
public void LogOnPost_InvalidBinding_DoesntCallAccountServiceLogOnValidate()
public void LogOnPost_ValidBinding_CallsAccountServiceLogOnValidate()
public void LogOnPost_ValidBindingButAccountServiceThrows_ReturnsLogOnViewWithInvalidModelState()
public void LogOnPost_ValidBindingButAccountServiceThrows_DoesntCallFormsAuthServiceSignIn()
public void LogOnPost_ValidBindingAndValidModelButFormsAuthThrows_ReturnsLogOnViewWithInvalidModelState()
public void LogOnPost_ValidBindingAndValidModel_CallsFormsAuthServiceSignIn()
public void LogOnPost_ValidBindingAndValidModel_RedirectsToReturnUrl()

殺完了嗎?我什至沒有展示服務測試!

我可以剔除哪些(如果有)?

TIA,

查爾斯

這完全取決於您需要/想要多少覆蓋範圍以及有多少可靠性是一個問題。

以下是您應該問自己的問題:

  • 此單元測試是否有助於實現我還沒有的功能/程式碼更改?
  • 如果我稍後進行更改,此單元測試是否有助於回歸測試/調試此單元?
  • 滿足此單元測試的程式碼是重要的還是值得進行單元測試?

關於第三個,我記得當我開始編寫單元測試時(我知道,與 TDD 不同),我會進行如下測試:

string expected, actual;
TypeUnderTest target = new TypeUnderTest();
target.PropertyToTest = expected;
actual = target.PropertyToTest;
Assert.AreEqual<string>(expected, actual);

我本可以利用我的時間做一些更有成效的事情,比如為我的桌面選擇更好的桌面。

我推薦 ASP.net MVC 書籍作者 Sanderson 的這篇文章:

<http://blog.codeville.net/2009/08/24/writing-great-unit-tests-best-and-worst-practises/>

引用自:https://stackoverflow.com/questions/1371755