关于在ASP.NET MVC中TDD或单元测试的问题

3
我一直在寻找如何进行单元测试,并发现这相当容易,但是我想知道的是,在asp.net mvc应用程序中,应该测试什么才是真正重要的,以及你们使用哪些方法? 在编写单元测试时,关于到底要测试什么,我无法找到明确的答案。 我不想进行不必要的测试,浪费时间做过度测试。
4个回答

5
你需要尽可能地对你的应用进行单元测试。
每写一行代码,你都需要验证其是否有效。如果你不进行单元测试,就需要以其他方式进行测试。即使启动网站并点击浏览也是一种测试方式。
与其他类型的测试(包括运行网站和手动使用)相比,单元测试往往可以提供最好的投资回报,因为它们相对容易编写和维护,并且可以快速反馈你是否引入了回归 bug。
我并不是说写单元测试没有开销——确实有,但任何类型的测试都需要开销,而不测试则会有很大的风险(因为回归 bug 很容易滑过去)。
补充单元测试以及其他类型的测试仍然是一个好习惯,但是一个良好的单元测试套件提供了优秀的回归测试套件。

2
+1 "如果代码值得编写,就值得进行测试。"(《测试之道》) - Yann Trevin

4

Ron Jeffries说过:“测试所有可能出现问题的内容。”

另外还有一位人士 - 我想应该是Kent Beck,但我找不到参考资料了 - 他说:“只测试你希望正常工作的代码。

以上两种策略都是相当不错的。


1

我认为在MVC中没有什么需要测试的。我认为所有的业务逻辑、规则等都需要测试,但是视图和控制器呢?

我唯一能想到的测试控制器的真正原因是进行集成测试。如果所有的业务逻辑都正确,那么这应该是一个简单的测试,总是返回true。

控制器应该只从视图获取数据并将数据传递给它,所以...

至于视图,除了打开视图并查看其功能外,还能做什么样的测试呢?

当我编写我的项目时,控制器中几乎没有代码,而我把所有的工作都放在我的业务引擎中,我对其进行了广泛的测试。


2
你不想对“如果用户未登录,则不应访问安全控制器”或“如果用户未填写必填字段,则不应进入下一个屏幕”进行单元测试吗?在向导中?听说过用Selenium测试浏览器中的视图吗? - John Farrell
实际上,如果您要访问一个安全控制器,那么应该在某个地方调用业务层对象,并且我认为应该进行一些基本的登录测试。然后可以对其进行测试。如果您想测试看看控制器是否在未登录时执行,那么可以编写一个测试。个人而言,我更喜欢不依赖控制器来处理这种安全级别。 - griegs
2
你的BLL中仍然需要有一些内容来表示“不允许这样做”,然后MVC仍然需要重定向到另一个屏幕。即使您的控制器非常简单,例如if(bll.IsAuth()){ // do redirect },您是否仍然希望确保重定向发生?“最好不要依赖控制器处理那种安全级别”您依赖于HTTP管道中的某些部分来提供安全性,通常是通过控制器公开的。 - John Farrell
你提出了一些有价值的观点,jfar。我认为我的想法是,在开始一个项目时,安全模型通常是我做的第一件事情,而且大多数情况下都是从现有项目中复制粘贴。所以我知道安全性能够正常工作,[授权]也会按照预期执行。在视图上进行快速检查可以确认这一点。因此,我想至少在一个安全控制器上进行一次测试可能并不是一个坏主意。 - griegs
@Dave 可以编写集成测试来尝试编译所有视图,从而捕获该错误。 除非您正在测试行为,否则Selenium是过度的。 我通过约定驱动所有视图行为(按钮,输出格式等)。 如果约定经过测试,则就我而言,您的视图已经得到了测试。 - Ryan
显示剩余4条评论

0

单元测试适用于服务/模型的测试。但是,当您需要测试应用程序功能时,更好的选择将是功能测试(即Selenium)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接