我看到很多问题都在问“如何”用一种特定的语言进行单元测试,但没有人问“什么”、“为什么”和“什么时候”。
是什么? 它对我有什么用? 我为什么要用它? 什么时候用(什么时候不用)? 有哪些常见的陷阱和误解
我看到很多问题都在问“如何”用一种特定的语言进行单元测试,但没有人问“什么”、“为什么”和“什么时候”。
是什么? 它对我有什么用? 我为什么要用它? 什么时候用(什么时候不用)? 有哪些常见的陷阱和误解
当前回答
我想推荐Gerard Meszaros的《xUnit测试模式》一书。它很大,但在单元测试方面是一个很好的资源。这里有一个链接到他的网站,在那里他讨论了单元测试的基础知识。http://xunitpatterns.com/XUnitBasics.html
其他回答
I think the point that you don't understand is that unit testing frameworks like NUnit (and the like) will help you in automating small to medium-sized tests. Usually you can run the tests in a GUI (that's the case with NUnit, for instance) by simply clicking a button and then - hopefully - see the progress bar stay green. If it turns red, the framework shows you which test failed and what exactly went wrong. In a normal unit test, you often use assertions, e.g. Assert.AreEqual(expectedValue, actualValue, "some description") - so if the two values are unequal you will see an error saying "some description: expected <expectedValue> but was <actualValue>".
总之,单元测试将使测试更快,对开发人员来说更舒服。您可以在提交新代码之前运行所有的单元测试,这样就不会中断同一项目中其他开发人员的构建过程。
单元测试,粗略地说,就是在与测试代码隔离的情况下测试代码。我想到的直接优势是:
测试的运行变得自动化和可重复 您可以在更细粒度的级别上进行测试,而不是通过GUI进行点击测试
请注意,如果您的测试代码写入文件、打开数据库连接或在网络上执行某些操作,则更适合将其归类为集成测试。集成测试是一件好事,但不应将其与单元测试混淆。单元测试代码应该简短、简单且易于执行。
另一种看待单元测试的方法是先编写测试。这被称为测试驱动开发(简称TDD)。TDD带来了额外的优势:
您不需要编写推测性的“我将来可能需要这个”代码——只要能够通过测试即可 您编写的代码总是会被测试覆盖 通过先编写测试,您不得不考虑如何调用代码,从长远来看,这通常会改善代码的设计。
如果你现在还没有做单元测试,我建议你现在就开始做。找一本好书,实际上任何xUnit-book都可以,因为它们之间的概念可以很好地转换。
有时编写单元测试会很痛苦。当出现这种情况时,试着找个人来帮助你,并抵制住“只写该死的代码”的诱惑。单元测试很像洗碗。这并不总是令人愉快的,但它让你的比喻厨房保持干净,而你真的希望它干净。:)
编辑:我想到了一个误解,虽然我不确定它是否普遍。我曾听一个项目经理说过,单元测试让团队把所有的代码都写了两次。如果它看起来和感觉是那样的,那么,你做错了。编写测试通常不仅可以加快开发速度,而且还为您提供了一个方便的“现在我完成了”指示器,否则您就不会有这个指示器。
使用Testivus。你需要知道的都在那里:)
我使用单元测试来节省时间。
在构建业务逻辑(或数据访问)时,测试功能通常涉及在许多屏幕上输入内容,这些内容可能尚未完成,也可能尚未完成。自动化这些测试可以节省时间。
对我来说,单元测试是一种模块化的测试工具。每个公共函数通常至少有一个测试。我编写额外的测试来覆盖各种行为。
您在开发代码时想到的所有特殊情况都可以记录在单元测试的代码中。单元测试还成为如何使用代码的示例的来源。
对我来说,在单元测试中发现我的新代码破坏了某些东西比检入代码并让前端开发人员发现问题要快得多。
对于数据访问测试,我尝试编写没有更改或自行清理的测试。
单元测试不能解决所有的测试需求。他们将能够节省开发时间并测试应用程序的核心部分。
如果你想使用Kent Beck推广的TDD方法开发项目,像NUnit、xUnit或JUnit这样的库是必须的:
你可以阅读《测试驱动开发介绍》(TDD)或Kent Beck的《测试驱动开发:举例说明》。
然后,如果你想确保你的测试覆盖了代码中“好的”部分,你可以使用NCover、JCover、PartCover或其他软件。它们会告诉你代码的覆盖率。取决于你对TDD的熟练程度,你会知道你是否已经很好地练习了它:)