单元测试是MVC模式的主要目标吗?


14

最近在一次采访中,一个问题是“我们为什么要使用MVC?” 我刚刚回答说,它与许多现实世界中的系统非常接近!解释了它在可维护性,可伸缩性等方面所具有的好处。但是他们并没有说服他们,最后告诉我说MVC主要是因为它“使易于单元测试”而被使用。

虽然我知道他们的观点是正确的,但我仍然怀疑这是否是主要原因,因为(i)即使我决定不编写单元测试用例,MVC还是一个可能的选择(ii)许多有单元测试用例的GUI系统都没有按照MVC。

因此,问题是“单元测试是MVC模式的主要目标吗?”

编辑:我认为他们可能会提到测试驱动开发/编写NUnit测试用例的简便性。这是因为我们可以为模型编写测试用例(前提是视图恰好反映了模型的状态变化)-如果我错了,请纠正我。


11
您没有通过面试,是吗?如果没有,那么幸运。从一开始我就不会加入那种心态非常错误的公司。:)单元测试绝对不是主要目标。它可以帮助单元测试,因为所有关注点都是分离的,但绝对不是主要目标。
Rudy

4
请记住,面试是双向的。您正在探查他们,就像他们正在测试您一样。您只是有一个危险信号:不要去这家公司。他们毫无头绪,但更糟糕的是,他们觉得自己没意识到这一点,因此没有改善的希望。如果您选择加入公司,您将面临许多kafkaesque的情况。
deadalnix

@Rudy不,我没有通过:P,它是领先的投资银行的开发中心。伙计们看起来不错,并且在其他问题上非常真实,这就是为什么我对此感到困惑。
WinW 2011年

@deadalnix,是的,对。在我看到这里的答案后,感觉还是一样。但是在将其发布到这里之前,我不确定。
WinW 2011年

我完全同意Deadalnix。不要去这家公司。
鲁迪

Answers:


33

主要目标是“关注点分离”,因为模型,视图和控制器都具有不同的职责。

原来的施乐PARC论文作者指出:

MVC的基本目的是弥合人类用户的心理模型与计算机中存在的数字模型之间的鸿沟。

如果将单元测试作为主要目标,则可以轻松地对视图进行单元测试。纵观单元测试项目/框架的情况,将发现它与所提出的主张完全相反。通常将使用集成和功能测试来测试视图。


2
我要说的主要目标是启用直接操纵隐喻(基本上就是引号所指)和用户授权(最初设想只有模型是由程序员编写的,视图和控制器是由最终用户编写的)。
约尔格W¯¯米塔格

14

我认为答案是肯定的“否”。也许这是在这个特定组织中观察到的主要好处,但我不会将其称为“主要目标”。

我想以某种方式实现MVC并不会那么困难,这很难进行单元测试(哎呀,我第一次做它的方式几乎是不可测试的)。

另一方面,可以说几乎任何模式(不包括Singleton之类的东西)都可以促进单元测试,因为它们最常促进去耦-但这是他们的“主要目标”吗?几乎不。


12

MVC(就像大多数已知的设计模式一样)在单元测试开始之前就已经存在。GoF书于1994年出版-它们只是记录了已经使用了多年(如果不是几十年)的模式。(并且没有提及单元测试。)关于单元测试,我无法确定它何时成为“公开”的确切时间-我亲自在有关极限编程的文章和第一本XP书籍中阅读了它。于1999年问世。

因此,显然,单元测试不是发明/记录模式的主要目标-可以公平地说,如果应用得当,模式将极大地促进单元测试。


时间轴参考是一个很好的提及-在逻辑上支持该参数。
WinW 2011年

日期似乎有小问题。heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html说:“ MVC于1978年被构思为解决特定问题的设计方案”。不用担心...您的论据仍然成立-MVC早在单元测试开始之前就已经存在了。
WinW 2011年

至少从1980年代开始就进行单元测试。那时我正开始我的职业生涯,我们对我从事的某些项目进行了单元测试(那时似乎还不是一个新主意)。我们只是没有现在拥有的预构建框架。
GreenMatt 2011年

2
@GreenMatt,我知道单元测试不是Kent Beck发明的,只是被重用了:-)但是AFAIK在XP和Agile开始广泛传播之前是相对未知的。
彼得Török

@PéterTörök:我记得:1)编写自己的简单代码以测试各个功能,直到回到大学为止(对我来说是1980年代中期),而我从别人那里得到了这个想法;2)在称为“编码和单元测试”(相对于“编码”)的阶段,查看和阅读有关80或90年代瀑布模型的描述和论文。(对不起,我不记得在哪里,所以不能提供引用。)因此,单元测试已经存在并且发展了很长时间。
GreenMatt 2011年

2

我认为不,简化单元测试是其中的好处之一,但是它是使用MVC时带来的好处的一部分,并列出了原因。说使用MVC的唯一主要原因是一个错误。听起来这家公司选择MVC来促进单元测试,因此他们认为这是主要原因。我个人使用MVC的原因是,与Web表单相比,它的简单性使其更易于设计和维护,但是每个人/公司都有使用任何技术的原因。


0

在ASP.NET MVC世界中,框架本身包括对ASP.NET的许多改进。这种设计模式的主要目的是将业务逻辑与用户界面隔离开来,以便专注于更好的可维护性,改进的可测试性和更清洁的应用程序结构。

ASP.NET MVC具有某些功能,如果您需要以下一项或多项,则使其成为最佳选择:

对生成的HTML的高度控制:与Web窗体不同,ASP.NET MVC中的视图完全按照您的指示呈现HTML。最近,Web窗体在此领域已得到改进,但仍不具备MVC的控制级别。

更容易的单元测试:使用ASP.NET MVC,可以很容易地遵循测试模式,例如测试驱动开发(TDD)。由于Web窗体中复杂的事件生命周期,因此在基于控件的框架之上,使用MVC可以使TDD变得容易得多。

关注点分离:这是指将系统的各个方面清楚地分开。由于其实现的模式,MVC应用程序分为离散的部分和松散绑定的部分(模型,视图和控制器),这使得维护变得容易。

其他好处包括:

MVC模式本身通过将应用程序的功能清楚地分为三个核心部分(模型,视图和控制器),使管理复杂性变得更加容易。

•ASP.NET MVC Web应用程序不使用视图状态或基于服务器的表单。这使MVC框架成为希望完全控制应用程序行为的开发人员的理想选择。视图状态可能会变得非常大,这对于像智能手机这样运行在慢速网络上的设备来说是个问题(传输所有信息可能会非常慢)。在Web窗体页面中,每个页面只能有一个。这是一个很大的限制。在MVC中,没有这样的限制-也就是说,您可以根据需要拥有任意数量的元素。

ASP.NET MVC为测试驱动的开发(TDD)提供更好的支持。

ASP.NET MVC非常适合大型开发人员团队支持的Web应用程序以及需要对HTML进行高度控制的Web设计人员。ASP.NET MVC请求处理

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.