如何启动单元测试或TDD?(How to start unit testing or TDD?)

2019-07-04 08:38发布

我读了很多让我确信我应该开始写单元测试的帖子,我也开始使用依赖注入(统一),方便嘲讽的缘故,但我仍然不太清楚,我应该开始编写单元哪个阶段测试和模拟,以及如何或在哪里开始。

将优选的方式被写入的方法之前的单元测试如在TDD方法中描述?

是否有单元测试任何不同的方法或方式?

Answer 1:

测试第一/测试后:

应当指出的是,“测试先行”作为TDD的部分是一样多(如果不是更多)设计做的,因为它是与单元测试做。 这是一个在自己的权利的软件开发技术 - 写在设计的不断细化的测试的结果。

在一个单独的说明:如果从纯粹的单元测试的角度来TDD一个显著的优势,那就是它是非常困难(虽然不是不可能)编写测试做TDD时,这是错误的。 如果你写的测试事前,因为所需的逻辑,以使测试通过尚不存在应该总是失败。 如果你写的测试之后,逻辑应该存在,但如果测试窃听或正在测试的错误的东西,它可以不管通过。

也就是说,如果你之前写不好的测试,你可以当你想到一个红色的(所以你知道测试是坏)获得绿灯。 如果你写一个坏的测试之后,你会当你期望一个绿色(不知道坏测试)得到了绿灯。

图书

务实的单元测试本书很值得一看,因为是罗伊Osherove的“单元测试的艺术”。 务实的书更窄集中在不同类型的测试输入,你可以尝试寻找漏洞,而TAOUT涵盖的主题包括测试双打,战略,可维护性等要么书是很好的流传较广的; 这取决于你从它想要的东西。

此外,这里的一讲的单元测试罗伊Osherove做了链接 。 这是值得的手表(所以是一些他所录制的测试审的影片,正如他指出的各种问题和原因,以及DOS /注意事项)。

如何启动

没有什么比写代码更好。 找到一个相当简单的类,它不引用其他东西。 然后,开始编写一些测试。

总是问自己:“我想尝试这个试验证明什么呢?” 你写它之前,然后给它一个体面的名字(通常包括被调用的方法,方案和预期的结果,例如在堆栈上:“流行WhenStackIsEmpty ThrowsException”)。

想想你可以扔的投入,那可能会产生有趣的结果等方法的不同组合。



Answer 2:

如果你是好奇的单元测试,以最好的学习方法是尝试。 你可能会开始在最初编写集成测试,但这很好。 当他们似乎也难以维持或工作太多了,写,读更多关于什么样的测试有(单元,功能集成),并尝试学习的差异。

如果您有兴趣与TDD开始,Bob大叔是一个很好的来源。 Particalulary 此 。

更多关于单元测试

确保你得到一致的测试结果。 重复运行相同的测试应始终返回相同的结果。

这些测试应该不需要配置。

测试顺序并不重要。 这意味着部分试运行可以正常工作。 另外,如果你保持这种设计理念在心中,它会在你测试的创建可能的援助。

请记住,任何测试总比没有更好的测试。 困难可以以书面形式促进易于创建和维护的很好的清洁单元测试中找到。 越是在困难的测试框架,更反对将有到使用它。 测试是你的朋友。



Answer 3:

在C#和与Visual Studio我发现下面的过程非常有帮助:

  1. 认为! 做一个小的前期设计。 你需要有一个清晰的画面,你需要什么类和对象如何相互关联。 只集中在一个类/对象(你想实现的类/对象)和一个关系。 否则,你最终用太重量级的设计。 我常结束了在一张备用片材多个草图(只有少数方框和箭头)。

  2. 创建生产代码的类,并适当命名。

  3. 选择要实现并为它创建一个方法存根类的一个行为。 在Visual Studio创建空的方法存根是一块蛋糕。

  4. 为它编写一个测试。 为此,你需要初始化对象,调用该方法,并断言验证结果。 在最简单的情况下断言需要另一种方法存根或在生产代码的属性。

  5. 编译并让测试运行表明您红色吧!

  6. 代码生产代码所需的行为看到绿色条。

  7. 移动到下一个行为。

对于此过程有两点是非常重要的:

  • 你需要你想要什么清晰的画面,以及如何在类/对象应该的样子。 至少花一些时间一个吧。
  • 想想类/对象的行为。 这将使测试和生产代码的行为为中心,这是思考类/对象很自然的方法。

测试第一或第一不考?

我觉得它通常很难改造试验,以现有的生产代码。 在大多数情况下,这是因紊依赖于其它的目的,当需要进行初始化,其是待测物。 因为你想用尽可能少的努力来初始化测试用例对象TDD通常避免这一点,。 这将导致一个非常松散的耦合。

当我改造试验,必须繁琐的工作是测试初始化​​对象的任务。 还断言可能很多,因为纠结依赖的工作。 为此,您需要更改产品代码,打破依赖。 使用依赖注入正确这不应该是一个问题。



Answer 4:

是的,做TDD的首选方法是先写测试(用名称测试驱动开发的暗示)。 当您使用TDD开始时可能很难知道从哪里开始写测试,所以我建议要务实了。 毕竟,我们的工作中最重要的部分是提供工作的代码,没有那么多的代码是如何制作的。

所以,你可以通过编写现有的代码测试开始。 一旦你的单元测试是如何构成的悬挂,哪些,似乎做好了,哪些是显得不是那么神,那么你会发现它更容易更深入到测试优先的方法。 我发现,我先写测试,在更大程度上随着时间的推移。 它仅仅成为增加经验更自然。



Answer 5:

史蒂夫·桑德森对TDD的最佳做法有很大的书面记录。

http://feeds.codeville.net/~r/SteveCodeville/~3/DWmOM3O0M2s/

此外,还有做,讨论了很多TDD原则(如果你不介意学习ASP.net MVC沿途)的ASP.net MVC项目一个伟大的系列教程http://www.asp.net/learn/ MVC-视频/查找在页面底部的“店面”系列。

MOQ似乎是热模拟框架最近,你可能要考虑这样做,以及

总之,尝试写一个测试来验证的东西找你试图存档,然后实现代码,使其工作。

该模式被称为红 - 绿 - 重构。 同时尽最大努力减少依赖性,使您的测试可以集中在一个组件。

就个人而言,我使用Visual Studio单元测试。 我不是一个铁杆的TDD开发者,但我喜欢做的事情是这样的:

  1. 创建一个新的项目,并确定了几个基于系统设计的基础类的(这样我至少可以得到一些智能感知)
  2. 创建单元测试项目,并开始编写单元测试,以满足我想要实现的功能。
  3. 让他们失败
  4. 使其通过(执行)
  5. 重构
  6. 重复,尽量使测试更加严格或创造更多的测试,直到我觉得它的固体。

我也觉得添加功能到一个现有的代码库的非常有用的。 如果你想添加一些新的功能,首先要建立要添加的东西,单步执行代码,看你要改变什么,然后再通过TDD过程中的单元测试。



Answer 6:

选择一个小的非关键应用,并使用TDD实现它。 起初,新的思维方式会觉得不可思议,但也许一两个星期练习后,填写感觉自然。

这里是一个教程应用程序 (分支“教程”),显示什么样的测试来写。 在该教程你写的代码通过预定义的测试案例,让你进入节奏,以后你再编写你自己的测试。 自述文件中包含的说明。 它是用Java编写的,但你可以很容易地适应C#。



Answer 7:

我想借此对TDD,测试优先开发,嘲笑和依赖注入之前 。 可以肯定,嘲弄可以帮助你更好地隔离你的单位-从而做到更好的单元测试-但我的脑海里,嘲讽和DI是可以用的只是第一次写你的测试清晰度干扰更高级的概念。

嘲笑,和DI,都有自己的位置; 他们是很好的工具,在你的工具箱。 但他们需要一些复杂,更深入的了解,比典型的测试新手了。 第一次写你的测试,但是,是因为它的声音完全一样简单。 所以它更容易采取,并且它的强大全部由自己(不嘲笑和DI)。 你会早起,胜更容易通过一次先写免费模拟测试,比试图开始嘲笑, TDD DI所有。

开始测试先行的; 当你很熟悉它,当你的代码,告诉你你需要嘲笑, 然后拿上嘲笑。



Answer 8:

我已经为它取单元测试/集成测试太远,那些确实太少了,所以我喜欢想我有两个之间的良好平衡的公司。

我建议TDD - 测试驱动开发。 这将确保你有良好的覆盖,但它也使集中你的注意力放在正确的地方和问题。

所以,你的每一件新的发展做的第一件事是写一个单元测试 - 即使你没有一个类来测试。

想想你要测试的。 现在运行测试。 为什么不把它编译? 因为需要ClassA。 创建类和运行测试。 为什么不把它编译? 因为它没有了methodA。 再次写一个方法和运行单元测试。 为什么测试失败? 因为在了methodA没有实现。 落实和了methodA运行测试。 它为什么会失败? 因为没有了methodA不会返回正确的预期值...等

你继续这样编写单元测试为您开发并最终测试将通过与一块的功能将是完整的。



Answer 9:

扩展史蒂夫·弗里曼的回答:戴夫的Astel的书被称为“测试驱动开发 - 实用指南”。 如果那种你正在编写的应用程序是一个GUI应用程序那么这应该是有帮助的。 我读肯特·贝克的书,但我无法弄清楚如何开始与TDD的项目。 从开始的Astel的书试驾完全不平凡的GUI应用程序用故事来完成。 它帮助了我很多实际上可以与TDD启动,这表明我在哪里以及如何开始。



Answer 10:

测试驱动的开发可能会造成混淆初学者,很多书,我当我是学习TDD将教你如何编写单元测试的计算器类,但似乎有建立现实世界的应用程序非常少的帮助下阅读,更以数据为中心,如果我敢说。 对我来说,突破是,当我明白了什么是行为驱动开发或BDD以及如何开始在外面做测试。现在,我可以简单地建议你专注于你的应用程序的行为,并编写单元测试,以验证它。 有很多争论TDD和BDD之间的事情,但我认为还有在各个层次的附加价值写自动化测试,对他们,我们需要重点看行为写。

哈迪·哈里里在这里有一个很好的职位http://hadihariri.com/2012/04/11/what-bdd-has-taught-me/

我也写了一篇一些文章,我觉得会理解所有在这里TDD相关的概念帮助

http://codecooked.com/introduction-to-unit-testing-and-test-driven-development/

http://codecooked.com/different-types-of-tests-and-which-ones-to-use/



Answer 11:

阅读在C#与NUnit的,单元测试 。 它有大约开始写睾丸和构建代码,使其更单元测试友好的全面信息。



Answer 12:

如果你以前没有写单元测试,然后就挑了一些类,并开始编写单元测试,并不断开发更多的单元测试工作。

当你获得的经验,你就可以开始模拟出例如数据库,通过使用统一的框架,但是,我会建议只是开始,使这个飞跃之前获得经验。

一旦你熟悉了如何编写单元测试,那么你可以尝试做TDD。



Answer 13:

我更喜欢KentBeck的做法这是很好的书,测试驱动开发的例子解释 - 肯特·贝克。

从你的问题我可以推断出你不知道与测试工作框架 - 选择正确的测试框架的工作是TDD或编写单元测试非常重要的(一般)。

只有TDD实际问题是“重构”(我们需要重构测试代码以及​​)花费大量的时间。



Answer 14:

我觉得戴夫Astels的书仍然是最好的引见一个。 这是为Java,但你应该能够翻译。



文章来源: How to start unit testing or TDD?