【发布时间】:2008-12-25 20:57:14
【问题描述】:
我以前从未做过单元测试,但现在我愿意尝试一下。
什么框架最适合初学者? 优点和缺点
在开始任何编码之前我应该阅读什么内容? 书籍/文章/代码/博客
是否有任何开源“示例项目”?
我将使用 asp.net mvc/C# 来使用它。
【问题讨论】:
标签: c# asp.net-mvc unit-testing
我以前从未做过单元测试,但现在我愿意尝试一下。
什么框架最适合初学者? 优点和缺点
在开始任何编码之前我应该阅读什么内容? 书籍/文章/代码/博客
是否有任何开源“示例项目”?
我将使用 asp.net mvc/C# 来使用它。
【问题讨论】:
标签: c# asp.net-mvc unit-testing
如果您在 Visual Studio 中集成了单元测试(我认为它是 Professional 的一部分并且更好),请从它开始,因为它是集成的。缺点是据我所知,在 Visual Studio 或 Team Foundation Server 之外没有任何测试运行程序会取消它进行自动化测试的资格,但我不确定这些信息的最新情况。
其他选择是xUnit.net、NUnit 和mbUnit。由于缺乏经验,我无法真正谈论利弊,但我现在使用 xUnit.net 因为 a) 我知道自 1.1 版以来有一个有效的 ASP.net MVC 模板和 b) Assert.Throws 只是性感。我在 Visual Studio 中使用免费的个人版 TestDriven.net 作为我的测试运行程序。
有一个 xUnit 的“如何开始”指南:http://www.codeplex.com/xunit/Wiki/View.aspx?title=HowToUse
同样,由于缺乏使用 NUnit 和 mbUnit 的经验,我无法真正比较它们,但我相信这三个都相当稳定和可用。
【讨论】:
Rob Conery 创建了一个serie of videos,展示了如何使用 MVC 创建电子商务应用程序。他正在使用完整的测试驱动方法(使用 Visual Studio 2008 中的内置测试框架)
【讨论】:
我使用在 Visual Studio 中添加的一个添加了TestDriven.Net 的右键单击菜单项,允许我在有/没有调试器的情况下运行单个测试。我开始使用 NUnit。任何一个都可能没问题。我更喜欢主要在 VS 中使用一个,因此我不必同时支持这两种工具,但是集成有一些优势,特别是如果您使用 Team System。
我相信 TestDriven.Net 支持很多不同的框架。您还需要使用覆盖分析器来帮助您查看代码的哪些部分已被测试覆盖,并帮助您确定可能需要的其他测试。您可能需要 Team system 才能对 VS 进行覆盖率分析,但总有 NCover(随 TestDriven.Net 提供)。
我建议从Pragmatic Programmers 或Test Driven Development with C# 中查看Pragmatic Unit Testing in C#。两者都有例子。
Rob Conery 的 StoreFront 示例是 ASP.NET MVC 的一个很好的示例。
【讨论】:
我建议您查看Gallio Automation Platform for .NET,因为它提供了一个中性(且免费)的工具,可以在一个 GUI 工具下为您实现多个单元测试框架。它是由 mbUnit 背后的人创建的。
对于任何单元测试框架,我的主要优点是它让您对自己的代码充满信心,练习 TDD 成为一件很自然的事情。
主要缺点是 ASP.NET 网络表单(我倾向于在其中编写代码)不容易进行单元测试,这就是 ASP.NET MVC 对人们如此有吸引力的原因。另一个缺点是你需要意识到你需要重构测试和他们使用的代码一样多,如果不是更多的话。
【讨论】:
我唯一要补充的是 a) 试一试,看看你喜欢什么 [这是一个废话答案,但每个人都有自己的好恶,所以'尝试一下'卡玩了很多] 以及您遇到的摩擦点以及 b) 在 XUnit CodePlex 网站上查看nice comparison of the primary unit test frameworks。
【讨论】:
我并不是要让你感到困惑,如果你是一名开发人员并且想要测试 ASP.NET MVC 项目然后使用 XUnit,它很好,并且由微软的员工开发。它有控制台和 gui 运行器,有助于自动测试。现在大多数开发人员都在使用 XUnit。
【讨论】:
让我们先从一些基本知识开始,好吗?单元测试是指对尽可能小的代码进行测试,通常是代码中的函数/过程/方法。我建议看看 Martin Fowler 的“重构”,这是一本关于单元测试如何在重构中发挥作用的好书。
根据您设置代码的方式,您可能需要研究诸如 RhinoMocks、NMocks、.Net MockObjects 等模拟框架,以便您可以设置测试装置来处理调用可能需要的预执行条件.那里可能有不止一些模拟对象单元测试示例,asp.net-mvc 上的教程应该有一两个测试示例。
不要忘记,asp.net-mvc 仍处于测试阶段,随着各种问题的解决,可能会做出更多改变。
【讨论】:
我正在使用Selenium RC 和Moq。到目前为止,我还没有遇到太多我无法测试并获得良好覆盖率的领域。
看看Selenium RC sample code。它非常简单易懂...
【讨论】: