Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC 3:测试控制器与集成测试_Asp.net Mvc_Asp.net Mvc 3_Unit Testing - Fatal编程技术网

Asp.net mvc MVC 3:测试控制器与集成测试

Asp.net mvc MVC 3:测试控制器与集成测试,asp.net-mvc,asp.net-mvc-3,unit-testing,Asp.net Mvc,Asp.net Mvc 3,Unit Testing,我最近开始使用MVC,因为我听说MVC的主要优点是它使应用程序单元可测试。在编写了第一个单元测试之后,我发现测试内部有很多逻辑的控制器并不总是那么简单(发送确认电子邮件、使用会话、上下文和其他ASP网络静态)。编写单元测试比编写功能性测试花费更多的时间,我不相信这是有用的 我很想将业务逻辑转移到一个“服务”层,该层消除了所有ASP Net静态,并且可以轻松测试。然后使用Selenium进行集成测试,以测试整个功能 当测试一个动作非常复杂(特别是模拟输入和设置环境)时,您是否遇到过这种情况 您是否

我最近开始使用MVC,因为我听说MVC的主要优点是它使应用程序单元可测试。在编写了第一个单元测试之后,我发现测试内部有很多逻辑的控制器并不总是那么简单(发送确认电子邮件、使用会话、上下文和其他ASP网络静态)。编写单元测试比编写功能性测试花费更多的时间,我不相信这是有用的

我很想将业务逻辑转移到一个“服务”层,该层消除了所有ASP Net静态,并且可以轻松测试。然后使用Selenium进行集成测试,以测试整个功能

  • 当测试一个动作非常复杂(特别是模拟输入和设置环境)时,您是否遇到过这种情况

  • 您是否找到在控制器中使用业务逻辑的好方法。或者您发现使用服务和控制器代码更好,只是在服务调用上进行中继

  • 在我看来,测试控制器更等同于集成测试,而不是单元测试。你觉得这个怎么样

  • 你认为单元测试控制器比集成测试有什么优势吗

  • 我很想将业务逻辑转移到一个“服务”层中 消除了所有ASP Net静态特性,并且易于测试。然后 使用Selenium进行集成测试以测试整个系统 功能

    差不多就在这里。如果您的控制器很复杂,则需要对其进行重构。他们根本不应该有任何业务逻辑。您可以使用模拟框架来模拟服务层,并通过这种方式轻松地测试控制器

    在我看来,测试控制器更等同于集成 测试而不是单元测试。你觉得这个怎么样

    我不同意这一点。您正在测试控制器,以确保它根据您提供的输入返回适当的响应。提供一个不存在的id?重定向到另一页或返回NotFound视图。模型状态无效?再次返回相同的视图,等等

    当测试一个动作非常复杂(特别是模拟输入和设置环境)时,您是否遇到过这种情况

    当您的控制器有很多依赖项并且它们紧密连接在一起时,就会发生这种情况。除非它是一个现有的代码,并且对代码进行更改会带来更多的麻烦,否则您应该通过接口或抽象类松散地耦合依赖项,这使得单元测试变得非常容易。您甚至应该在会话、缓存等对象周围使用包装器

    正如@Dismissile所建议的,首先你必须重新考虑你的控制器,然后单元测试将很容易

    您是否找到在控制器中使用业务逻辑的好方法。或者您发现使用服务和控制器代码更好,只是在服务调用上进行中继

    控制器不是放置业务逻辑的地方。所有业务逻辑都应该在模型类中。控制器的全部职责是与模型对话,并将视图、json或任何内容返回给客户机。如果控制器中有复杂的业务逻辑,则应将其移动到模型类中

    简单地说,您应该考虑“转储视图..精简控制器..胖模型”

    在我看来,测试控制器更等同于集成测试,而不是单元测试。你觉得这个怎么样

    集成测试与单元测试完全不同。在集成测试中,您必须设置应用程序并针对其运行测试用例。在这里,您测试的是每个测试场景中整个应用程序的行为,而不是单个单元。单元测试就是测试类中方法的功能。在单元测试中测试一个类或方法应该独立于其他类或方法

    但问题是,在设计应用程序时,应该记住单元测试,否则单元测试将变得和集成测试一样困难,当然,这根本不是单元测试

    你认为单元测试控制器比集成测试有什么优势吗

    与系统级相比,在单元级查找和修复错误非常容易。所以答案是肯定的


    我认为在你的例子中,你有一个应用程序,它的控制器做的比它们必须做的更多。因此,如果您非常认真地考虑单元测试,那么您必须在需要的地方重新考虑并松散地耦合依赖项,否则编写单元测试根本没有什么好处。

    无法更好或更简洁地解释。