Catch 单元测试工具
# Catch 单元测试工具
https://github.com/catchorg/Catch2
最近学习一个比较简单的单元测试工具,特此总结下:
## 使用方式:
ps: Catch 可以做更复杂的测试方式。当前只学懂皮毛,只介绍简单方式,容易上手。
1. 只需要#include "catch.hpp"即可
2. 可以使用TEST_CASE来封装一个测试样例,可自带一到两个参数,第一个描述测试方法,第二个类型。全部以字符串定义。所以在运行时可以指定一个,或者一类样例进行测试,也可以全部进行测试。
3. 使用REQUIRE() 和CHECK();来检测结果是否与预期一致。出现问题后不会中断测试。
4. TEST_CASE里可以通过定义SESSION来简化代码逻辑。比如当测试不同参数对功能的影响时,只需定义多个SESSION来区别参数的定义,调用逻辑可以复用。TEST_CASE会以其中每一个SESSION组合一个测试流程。
5. Catch支持BDD-Style, 即可使用SCENARIO,GIVEN,WHEN,THEN组合进行场景模拟。
## 运行方式:
```c
Catch v2.7.0
usage:
unittest [<test name|pattern|tags> ... ] options
where options are:
-?, -h, --help display usage information
-l, --list-tests list all/matching test cases
-t, --list-tags list all/matching tags
-s, --success include successful tests in
output
-b, --break break into debugger on failure
-e, --nothrow skip exception tests
-i, --invisibles show invisibles (tabs, newlines)
-o, --out <filename> output filename
-r, --reporter <name> reporter to use (defaults to
console)
-n, --name <name> suite name
-a, --abort abort at first failure
-x, --abortx <no. failures> abort after x failures
-w, --warn <warning name> enable warnings
-d, --durations <yes|no> show test durations
-f, --input-file <filename> load test names to run from a
file
-#, --filenames-as-tags adds a tag for the filename
-c, --section <section name> specify section to run
-v, --verbosity <quiet|normal|high> set output verbosity
--list-test-names-only list all/matching test cases
names only
--list-reporters list all reporters
--order <decl|lex|rand> test case order (defaults to
decl)
--rng-seed <'time'|number> set a specific seed for random
numbers
--use-colour <yes|no> should output be colourised
--libidentify report name and version according
to libidentify standard
--wait-for-keypress <start|exit|both> waits for a keypress before
exiting
--benchmark-resolution-multiple multiple of clock resolution to
<multiplier> run benchmarks
```