C++测试框架Catch的作用

C++ 测试框架Catch使用

今天第一次接触并使用C++测试框架,也是有需求的,是因为自己跟着lept_json教程来写json的parser,顺便可以学一下测试框架的使用。

Google Test还是没有配好,可能之后等熟悉测试框架了之后再说。这次使用的是Catch

引入方式

https://github.com/philsquared/Catch
https://github.com/philsquared/Catch/blob/master/docs/tutorial.md
GitHub上的Repo已经说得比较清楚了

  1. 下载catch.hpp 就一个单的头文件
  2. 放到想要放的地方
  3. 按正常的头文件引入就可以了,在CMake里写相应的东西

但为了测试与原有的项目分离,还是需要有所规划,因为这个json parser的项目很简单,没有分得很清晰严格。

工程示例

工程结构

  • my_lept_json
    • lib
      • catch.cpp
    • CMakeLists.txt
    • lept_json.h
    • lept_json.cpp
    • test.cpp

CMake配置CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
cmake_minimum_required(VERSION 3.8)
project(my_lept_json)
set(CMAKE_CXX_STANDARD 11)
set(CATCH_TEST_HEADER lib/catch.hpp)
set(SOURCE_FILES lept_json.h lept_json.cpp)
set(TEST_FILES test.cpp)
add_executable(my_lept_json ${SOURCE_FILES} ${CATCH_TEST_HEADER} ${TEST_FILES})
target_link_libraries(my_lept_json)

测试文件示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//
// Created by Zhao Xiaodong on 2017/8/28.
//
#define CATCH_CONFIG_MAIN
#include "lib/catch.hpp"
#include "lept_json.h"
void test(const char *json, leptType originType, leptType expectedType, leptParseResponse response) {
LeptValue value;
value.type = originType;
REQUIRE(leptParse(&value, json) == response);
REQUIRE(getType(&value) == expectedType);
}
TEST_CASE("Parse null") {
test("null", LEPT_TRUE, LEPT_NULL, LEPT_PARSE_OK);
}
TEST_CASE("Parse true") {
test("true", LEPT_NULL, LEPT_TRUE, LEPT_PARSE_OK);
}