我现在已经将所有单元测试迁移到MSpec了,是否需要NUnit?

时间:2013-10-30 12:03:27

标签: unit-testing tdd nunit bdd mspec

我正在使用NUnit进行TDD。我以行为风格命名我的NUnit测试(比如给定,然后,当时)。但是我现在正在使用MSpec进行所有单元测试。我还在编写测试,使用模拟等等......所以,它们仍然是单元测试。但是,我认为不需要NUnit。

我很紧张地把所有的努力都扔掉去学习NUnit。我是否应该完全放弃TDD / NUnit,考虑到BDD是TDD完成的吗?

3 个答案:

答案 0 :(得分:6)

现在您已经接受了BDD,您正在遵循“从外到内”的开发方法。

可以在programmers.stackexchange.com找到这种开发技术的简洁定义。我引用:

  

“Outside-In(伦敦学校,自上而下或”模拟TDD“饰演Martin Fowler   会叫它):你知道互动和合作者   提前(特别是那些顶层)并从那里开始(顶级),   嘲笑必要的依赖。对于每个完成的组件,您   转移到以前嘲笑的合作者,并再次开始TDD   在那里,创建实际的实现(即使使用,它们   由于抽象而不需要)。请注意,从外到内   方法与YAGNI原则相吻合。“

使用BDD时,您将以自上而下的方式开发并模拟依赖项以满足您的测试需求。一旦您的BDD测试通过,您就会恢复使用TDD 来实现您在BDD测试期间遇到的具体版本的依赖项(使用“由内而外”方法)。

因此,您的TDD和BDD测试都很有价值,因为它们测试代码的不同方面,即BDD测试确保用户的交互测试针对系统中的所有层,而TDD测试覆盖了各个组件。细节和孤立(通过嘲弄)。

所以不要放弃你的NUnit测试!

要结束我的回答,你说:

  

BDD正确完成TDD

正如我上面所解释的,BDD和TDD之间的主要区别在于它们涵盖的代码范围。 Dan North在这篇here上有一篇很好的文章。

答案 1 :(得分:2)

NUnit和MSpec基本上是测试框架。它们都可以用来编写单元,集成或验收测试。您可以在层,行为或任何定义的正确交集处实施测试。两个框架都支持BDD样式和命名。 MSpec预先与自定义代表一起完成。 NUnit使它更具挑战性(你必须摆弄构造函数和设置和测试方法)。

您仍在编写测试(TDD),但现在您正在使用直接支持上下文/规范 - 语法和行为测试(BDD)与对象结构测试的测试框架。

问题不是关于TDD与BDD,安排 - 行动 - 断言语法与上下文/规范 - 语法,或测试框架中的任何其他结构差异(每个上下文一个设置,每个规范一个断言) ,等等,但你的技能与特定的框架!

我说,拥抱你的新知识!你喜欢mspec吗?你有可能让同事转到mspec吗?你会完全忘记你的NUnit技能(API或命令行运行器)吗?

如果您继承了一些旧项目或拥有喜欢NUnit的团队成员,那么这两个框架可以在您的解决方案和构建脚本中并排存在,而不会遇到任何麻烦。用不同的方法编写测试和报告结果并不是很好。

答案 2 :(得分:1)

根据我的经验,有些情况下NUnit仍然是一个不错的选择。例如,mspec目前不支持示例,而NUnit具有TestCase和TestCaseSource。这些在单元测试场景中很有用,因此可能仍然可以使用xUnit样式工具。不需要“忘记”任何事情,我认为很好地了解工具带中的所有工具并为手头的任务选择正确的工具。