如何使用MSTest / VS2008缓解TDD

时间:2020-03-05 18:43:39  来源:igfitidea点击:

我一次又一次地读到,与其他测试框架(例如nUnit,MBUnit等)相比,使用MSTest进行TDD /测试首先要困难得多。由于基础架构政策,MSTest是唯一的选择吗?我主要是想知道VS 2008 Team Suite,但是我想开始使用VS 2008 Pro的技巧也是合适的,因为这些版本现在也包含了一些MSTest功能。

解决方案

回答

我还没有看到与MSTest有关的任何严重问题。具体来说,我们在说什么?实际上,我们正在从NUnit转移到MSTest。不过,我不知道我们这样做的原因。

回答

mstest有很多配置文件,因此操作性较差。
我选择mbunit的另一个原因是mbunit的"回滚"功能。这使我们可以回滚在此测试中完成的所有数据库操作,因此我们实际上可以进行全电路测试,而不必担心测试后池被污染。
在mstest中也缺少RowTest工具。

我建议仅在构建过程中将mbunit作为依赖项运行,它很容易将其与bin浮动在一起,并提供引用,无需安装。

回答

如果我们别无选择,只能使用MSTest,请学习键盘快捷键。它们会让生活更轻松。

在当前上下文中测试:CTRL + R,T
解决方案中的所有测试:CTRL+RA

在当前上下文中进行调试测试:CTRL+RCTRL+T
调试解决方案中的所有测试:CTRL+RCTRL+A

回答

要回答一个非针对性的问题,我的答案是
"可能是NUnit不在视线范围之内。"

免责声明:我没有使用xUnit的MS版本的实际经验,但是我听到诸如"我们需要安装庞大的想法才能在单独的计算机上运行测试"之类的问题,这是完全不可以的。
除此之外,MS还可以通过某种与整个想法背道而驰的IDE铃声/口哨,为新手提供正确的路径。就像从类生成测试一样,我记得大约一年以前了。这打破了测试驱动设计的全部目的,应该从RGR的微小步骤中浮现出来:编写测试使其通过重构。如果使用该工具,则会失去整个体验。

我将停止我的讲道..现在:)

回答

MSTest当然不如某些开源框架有效或者可扩展,但它是可行的。由于该问题是关于使用MSTest使生活更轻松,而不是替代方法,因此,这里是我的MSTest提示。

  • 捷径。就像Haacked所说的那样,花几秒钟来学习这些快捷方式。
  • 当前上下文。由于MSTest太慢,因此,请尽可能在当前上下文中运行测试。 (CTRL+RCTRL+T)。如果光标在测试方法中,则只会运行该方法。如果光标在方法之外,但在测试类中,则仅运行测试。并带有名称空间等
  • 高效的测试和组织。狗慢了。通过编写高效的测试,使事情变得尽可能好。将慢速测试移至其他测试类或者项目,以便我们可以更频繁地运行快速测试。
  • 使用WCF进行测试。如果要测试服务,请确保进行调试(而不是RUN)测试,以便Visual Studio可以启动ASP.NET开发Web服务器。在完成这些操作之后,我们可以返回到RUN模式,但是始终进行调试可能会更容易,因此我们不必考虑它。
  • 配置文件。编辑测试运行配置,以将.config文件移动到测试执行文件夹中。
  • 与Source Safe集成。我们需要意识到MSTest讨厌SourceSafe,而且感觉是相互的。由于MSTest希望将测试文件置于源代码管理下,并将其添加到解决方案中,因此,每次运行测试时,它都必须签出解决方案。因此,SourceSafe必须以多重签出模式运行,以避免杀死其他开发人员。
  • 忽略绒毛使用MSTest,我们将获得十几个不同的窗口和视图。测试运行,测试视图,测试列表...它们都没有什么用。坚持测试结果,我们会更加快乐。
  • 坚持"单元测试"。添加新测试时,可以添加有序测试,单元测试或者通过向导运行。坚持简单的简单单元测试。

回答

我的同事Mike Hadlow总结了为什么我们完全不喜欢MSTest的原因。

他设法将其从项目中删除,但是我目前正在从事一个涉及更多政治事务的大型项目,因此我们仍在使用它。

结果是,实施MSTest的任何人都不了解TDD。我很遗憾听起来像是M $混蛋,但我确实不是。但是我很恼火,因为我不得不忍受一个非常糟糕的工具。

回答

  • MSTest具有"高摩擦性":与MStest和MSBuild相比,使用NAant和MbUnit获得构建脚本。没有比较。
  • MSTest很慢MbUnit和NUnit在我的体验中更快(gallio在这里可能会有所帮助)
  • MStest添加了一些我不需要的东西,例如有线配置文件等。
  • MSTest没有其他操作系统测试框架。签出xUnit和MbUnit

它太难使用了,并且有许多更好的选择。

回答

我很好奇我不明白的是,人们开始比较MSTest提供的所有开放源代码工具并开始抨击它。评论它是多么的笨拙,多么的不合理等等。恕我直言,这是因为它与xUnit框架有根本的不同。它针对并行执行进行了优化。

即使是静态的ClassInitialze和Cleanup以及每个测试都具有唯一的TestContext的怪癖,至少是因为下一代,至少对于使用MS语言的Windows业务程序员来说,它们具有并行编程概念。

我很不幸地在一个拥有成千上万个单元测试的项目中工作。他们过去几乎占用了大部分构建时间!使用MSTest,我们可以将时间缩短到非常可管理的时间范围。

回答

如前所述,oyu需要安装完整的IDE才能在另一台计算机上使用MSTest,这有点废话。我想这是因为他们想确保单元测试仅在高端视觉工作室上起作用,并且我们可以使用任何其他方式来运行它们。

另外,MSTest相当慢,这是因为在每个测试之间,它都会为每个测试重建整个上下文,这可以确保先前的测试失败或者不影响当前的测试,但会降低测试速度。但是,我们可以使用/ noisolation标志,该标志将更快地运行MSTest进程中的所有测试。
要在IDE中加速,请执行以下操作:在VS IDE中,可以转到"工具"-"选项",然后选择"测试工具"。选择名为"测试执行"的子项目,并在右侧的对话框中,确保选中"保持测试执行引擎在测试运行之间运行"复选框。

回答

我已经使用NUnit进行了TDD开发多年,由于角色变更,现在已经使用MSTest大约4个月了。

我认为MSTest不会阻止某人进行TDD。我们仍然拥有TDD所需的所有核心内容,例如基本的断言和模拟框架(我使用Rhino Mocks)。

MSTest确实与Visual Studio紧密集成,此集成的最佳组件是内置的代码覆盖率工具。


有许多令人信服的理由不使用MSTest。我认为两个最大的缺点是:

  • 缺少断言选项(与NUnit相比)
  • 缓慢的测试运行程序(与NUnit相比较慢)

这意味着编写断言需要花费更多的代码,而测试运行速度慢则意味着整个过程比NUnit慢。
开源选项在社区中也提供了更多支持。

如果我们将TFS用于CI,则需要跳过几个步骤才能使NUnit发布测试结果。相比之下,使用MSTest在TFS上运行测试非常简单明了。
如果我们不喜欢TFS,而不是我会一直使用NUnit,那就更好了。