单元测试(英语:Unit Testing)又称为模块测试 ,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。
单元测试允许程序员在未来重构代码,并且确保模块依然工作正确(复合测试)。这个过程就是为所有函数和方法编写单元测试,一旦变更导致错误发生,借助于单元测试可以快速定位并修复错误。
单元测试可以由两种方式完成:
手工测试 | 自动化测试 | |
---|---|---|
定义 | 手动执行测试用例并不借助任何工具的测试被称为人工测试。 | 借助工具支持并且利用自动工具执行用例被称为自动测试。 |
效率 | 消耗时间并单调:由于测试用例是由人力资源执行,所以非常缓慢并乏味。 | 快速自动化运行测试用例时明显比人力资源快。 |
人力资源要求 | 人力资源上投资巨大:由于测试用例需要人工执行,所以在人工测试上需要更多的试验员。 | 人力资源投资较少:测试用例由自动工具执行,所以在自动测试中需要较少的试验员。 |
可信度 | 可信度较低:人工测试可信度较低是可能由于人工错误导致测试运行时不够精确。 | 可信度更高:自动化测试每次运行时精确地执行相同的操作。 |
程式化 | 非程式化:编写复杂并可以获取隐藏的信息的测试的话,这样的程序无法编写。 | 程式化:试验员可以编写复杂的测试来显示隐藏信息。 |
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
JUnit 促进了“先测试后编码”的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。这个方法就好比“测试一点,编码一点,测试一点,编码一点……”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。
单元测试用例是一部分代码,可以确保另一端代码(方法)按预期工作。为了迅速达到预期的结果,就需要测试框架。JUnit 是 java 编程语言理想的单元测试框架。
一个正式的编写好的单元测试用例的特点是:已知输入和预期输出,即在测试执行前就已知。已知输入需要测试的先决条件,预期输出需要测试后置条件。
每一项需求至少需要两个单元测试用例:一个正检验,一个负检验。如果一个需求有子需求,每一个子需求必须至少有正检验和负检验两个测试用例。