所以我开始抓住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/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。