Asp.net mvc ASP.NET MVC中的TDD或单元测试问题

Asp.net mvc ASP.NET MVC中的TDD或单元测试问题,asp.net-mvc,unit-testing,tdd,Asp.net Mvc,Unit Testing,Tdd,我一直在研究如何进行单元测试,发现这很容易,但是,我想知道的是,在asp.net mvc应用程序中,什么应该是真正重要的测试,以及你们使用的方法是什么? 我只是找不到一个关于编写单元测试时真正要测试什么的明确答案。 我只是不想做不必要的测试,也不想浪费开发时间进行过度的测试。我实际上不认为任何东西需要在MVC中进行测试。我认为您所有的业务逻辑、规则等都需要测试,但是视图和控制器呢 我能看到的测试控制器的唯一真正原因是集成测试。如果您的所有业务逻辑都是正确的,那么这应该是一个简单的测试,总是返回t

我一直在研究如何进行单元测试,发现这很容易,但是,我想知道的是,在asp.net mvc应用程序中,什么应该是真正重要的测试,以及你们使用的方法是什么? 我只是找不到一个关于编写单元测试时真正要测试什么的明确答案。
我只是不想做不必要的测试,也不想浪费开发时间进行过度的测试。

我实际上不认为任何东西需要在MVC中进行测试。我认为您所有的业务逻辑、规则等都需要测试,但是视图和控制器呢

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

控制器实际上应该只从视图中获取数据,并将数据传递给视图,以便

至于视图,除了打开视图并查看它的功能外,还可以在那里进行什么样的测试


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

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

您应该尽可能多地对应用程序进行单元测试

对于您编写的每一行代码,您都需要验证它是否有效。如果不进行单元测试,则需要以其他方式进行测试。即使是启动网站并四处点击也是一种测试

当您将单元测试与其他类型的测试(包括运行站点和手动使用站点)进行比较时,单元测试往往会提供最佳的投资回报,因为它们相对容易编写和维护,并且可以为您提供关于您是否刚刚引入回归bug的快速反馈

我并不是说写单元测试没有开销——有,但任何类型的测试都有开销,根本不测试也有很大的开销(因为回归bug很容易通过)

用其他类型的测试补充单元测试仍然是一个好的实践,但是一个好的单元测试套件提供了一个优秀的回归测试套件。

说”

另一个人(我想是Kent Beck,但我找不到参考资料)说,“只测试你想工作的代码。


这两种方法都是很好的策略。

您不想在向导中进行单元测试“如果用户未登录,则不应转到安全控制器?”或“如果用户未填写必填字段,则不应转到下一屏幕”?。听说过Selenium用于在浏览器中测试视图吗?实际上,如果您要使用安全控制器,那么它应该在某处调用业务层对象,我认为,它应该执行一些基本的登录测试。然后可以对其进行测试。如果您想测试控制器是否在未登录的情况下执行,那么一定要编写测试。就我个人而言,我不喜欢依靠控制器来处理这种安全级别。BLL中的某些内容仍然必须说“不,这是不允许的”,然后MVC仍然必须重定向到另一个屏幕。即使控制器像(bll.IsAuth()){//do redirect}一样简单,您不想确保重定向发生吗?“宁愿不依赖控制器来处理那个级别的安全性”您依赖某个地方的某个HTTP管道来实现安全性,而这通常是通过控制器公开的。我想我的出发点是,当我开始一个项目时,安全模型通常是我做的第一件事,它主要是从现有项目复制粘贴。所以我知道安全机制是有效的,[授权]会按照它的要求去做。快速查看视图可以确认这一点。因此,我想在一个安全控制器上至少进行一次测试可能不是那么糟糕的想法+1 MVC层应该没有任何值得测试的内容。模型中的核心逻辑应该经过很好的测试。我同意jfar的观点,即您可能希望测试安全关键代码,但在MVC层中执行的任何安全操作都应该是BLL的“双重检查”。+1“如果代码值得编写,那么它应该进行测试。”(Testivus的方式)