freeCodeCamp/guide/chinese/software-engineering/unit-tests/index.md

51 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Unit Tests
localeTitle: 单元测试
---
## 单元测试
单元测试是一种测试,位于软件测试金字塔的底部。 它涉及将代码库分解为更小的部分(或单元)并单独测试它们。 根据编程语言(或范例)的类型,这些可以针对您定义为单元的任何内容,尽管最常见的做法是针对功能。
### 为什么这样?
* **保护** - 单元测试可防止为防御性编程引入新旧漏洞
* **信心** - 您可以添加更改,或重用或重构代码(两者都很常见),并确保您没有添加错误
* **文档** - 单元测试记录了代码的行为和流程,因此对于熟悉代码的人来说很容易理解
* **隔离** - 它将模块与整个功能**隔离**开来。这种方法迫使你自己想一个模块,并问它的工作是什么?
* **质量** - 由于单元测试迫使您考虑并使用自己的API因此它强制实施良好/可扩展的接口和模式。它可以指出应该解决的任何紧密耦合或过度复杂。糟糕的代码通常难以测试
* **行业标准** - 现在,单元测试是一门普遍的学科,并且是大部分软件公司的要求
* **更少的错误** - 大量研究表明对应用程序进行测试可以将生产错误密度降低40-80
### 示例在Javascript中
假设有一个函数写在**add.js**文件中
```javascript
var add = function(number1, number2){
return number1 + number2;
}
```
现在,为了编写这个特定函数的单元测试,我们可以使用像[mocha](http://mochajs.org/)这样的测试工具
```javascript
const mocha = require('mocha')
const chai = require('chai') // It is an assertion library
describe('Test to check add function', function(){
it('should add two numbers', function(){
(add(2,3)).should.equal(5) //Checking that 2+3 should equal 5 using the given add function
});
});
```
### 测试驱动开发
单元测试是测试驱动开发TDD软件开发方法的关键特性。在这种方法中通过重复使用非常短的周期来编写特定特征或功能的代码。首先开发人员编写一组自动化单元测试并确保它们最初失败。接下来开发人员实现传递测试用例所需的最少量代码。一旦验证代码的行为符合预期开发人员就会返回并重构代码以遵守任何相关的编码标准。
### 更多信息
Martin Fowler关于单元测试 [martinfowler.com](https://www.martinfowler.com/bliki/UnitTest.html)
罗伯特·马丁又名“鲍勃博士”关于TDD [butunclebob.com](http://www.butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd)
Eric Elliot关于单元测试和TDD [中等](https://medium.com/javascript-scene/5-common-misconceptions-about-tdd-unit-tests-863d5beb3ce9)