我看到很多问题都在问“如何”用一种特定的语言进行单元测试,但没有人问“什么”、“为什么”和“什么时候”。
是什么? 它对我有什么用? 我为什么要用它? 什么时候用(什么时候不用)? 有哪些常见的陷阱和误解
我看到很多问题都在问“如何”用一种特定的语言进行单元测试,但没有人问“什么”、“为什么”和“什么时候”。
是什么? 它对我有什么用? 我为什么要用它? 什么时候用(什么时候不用)? 有哪些常见的陷阱和误解
当前回答
测试驱动开发在某种程度上取代了单元测试这个术语。作为一个老手,我会提到它的更一般的定义。
单元测试还意味着测试一个较大系统中的单个组件。这个组件可以是dll、exe、类库等。它甚至可以是多系统应用程序中的单个系统。因此,单元测试最终是对一个更大系统的单个部分进行测试。
然后,您可以通过测试所有组件如何一起工作来进行集成测试或系统测试。
其他回答
单元测试是关于编写测试应用程序代码的代码。
名称的Unit部分是关于一次测试小单元代码(例如一个方法)的意图。
xUnit是用来帮助测试的——它们是帮助测试的框架。其中一部分是自动测试运行器,它会告诉您哪些测试失败,哪些测试通过。
它们还可以在每个测试之前设置您需要的公共代码,并在所有测试完成后将其删除。
您可以使用一个测试来检查是否抛出了预期的异常,而不必自己编写整个try catch块。
如果你想使用Kent Beck推广的TDD方法开发项目,像NUnit、xUnit或JUnit这样的库是必须的:
你可以阅读《测试驱动开发介绍》(TDD)或Kent Beck的《测试驱动开发:举例说明》。
然后,如果你想确保你的测试覆盖了代码中“好的”部分,你可以使用NCover、JCover、PartCover或其他软件。它们会告诉你代码的覆盖率。取决于你对TDD的熟练程度,你会知道你是否已经很好地练习了它:)
我想推荐Gerard Meszaros的《xUnit测试模式》一书。它很大,但在单元测试方面是一个很好的资源。这里有一个链接到他的网站,在那里他讨论了单元测试的基础知识。http://xunitpatterns.com/XUnitBasics.html
单元测试是一种实践,以确保您将要实现的功能或模块的行为符合预期(需求),并确保它在边界条件和无效输入等场景下的行为。
xUnit, NUnit, mbUnit等都是帮助你编写测试的工具。
单元测试是在不需要该代码单元所依赖的基础设施的情况下对代码单元(例如单个函数)进行测试。即在隔离环境中进行测试。
例如,如果您正在测试的函数连接到数据库并执行更新,那么在单元测试中您可能不想执行该更新。如果这是一个积分测试,你会这样做,但在这个例子中,它不是。
因此,单元测试将测试您正在测试的“函数”中所包含的功能,而不会产生数据库更新的副作用。
假设函数从数据库中检索了一些数字,然后执行标准偏差计算。你想测试什么?标准偏差计算正确,还是数据从数据库返回?
在单元测试中,您只想测试标准偏差的计算是否正确。在集成测试中,您希望测试标准偏差计算和数据库检索。