一,关于单元测试
单元测试指对软件中的最小可测试单元进行检查和验证,软件中的最小可测试单元有函数、接口、类等。测试时,最小可测试单元与程序中的其他部分相隔离。常用的单元测试框架有: Catch、Boost.Test、googletest、UnitTest++。常见的两种测试模式:TDD(测试驱动开发)和BDD(行为驱动开发)。
二,TDD模式简介
测试驱动开发 (TDD,全称test-driven-development) 是一种软件开发实践,专注于在开发实际代码之前创建单元测试用例。它是一种迭代式的软件开发流程,在迭代的过程中将编码、单元测试和代码重构结合起来。TDD在测试失败时修改或编写新代码,防止重复测试同一个bug。
TDD的步骤
1.根据对功能的假设来创建测试单元
2.测试失败后更改代码,直到运行正常
3.重构代码。检查冗余的代码,优化代码的结构。
TDD的优点
大大减少了开发时导致的缺陷数量。
后续花在调试上的时间会更少。
新功能的添加和测试变得更加容易。
测试覆盖率高于传统的开发模式。
三,BDD模式简介
行为驱动开发(BDD,全称behavior-driven-development),是基于TDD做的修改,BDD和TDD之间有很多相似之处,因为它们都需要开发人员在编写代码之前先编写测试用例以通过测试。但是TDD更侧重于单独测试较小的功能,而BDD更侧重于从用户的角度验证应用程序的业务功能。
BDD的步骤
1.给定业务功能的场景
2.定义场景的执行步骤,编写测试用例
3.运行执行步骤的测试代码,如果失败了,修改步骤对应的代码,直到测试通过
BDD的语言描述形式
GIVE-WHEN-THEN模式, 参考下面两个DSL语言样例
场景1:
Scenario: Blog Search
Given I visit the blog page
When I search for “BDD”
Then I get posts related to BDD
场景2:
Scenario: user logs in to application
Given authorized user “John”
When I enter “John” in the username field
And I enter “sekret1” in the password field
And I click the login button
Then the homepage should open
BDD的优点
由于BDD使用非常简单的语言来描述测试过程,更方便沟通和迭代,使产品经理、开发者和测试者都可以深入了解项目的进展,使开发出来的产品可以快速响应用户的反馈和需求。BDD可以最大限度的减少因误解需求和验收标准而导致的返工。
下面开始介绍Catch2的用法,并利用Catch2实现BDD风格的测试。
四,Catch2介绍
Catch2是主要用于C++开发场景的单元测试框架&