如何避免使用 GoogleTest 混合测试和生产代码
How to avoid mixing test and production code using GoogleTest?
我开始使用GoogleTest。似乎需要一个主文件来运行测试:
在谷歌测试中跨多个文件分离测试用例
但是目前在我的演示应用程序中,我已经有一个主文件:
src/
-> MyType.h
-> main.cpp
-> Makefile
这最终将成为我的"生产"应用程序。我不想用 gtest 包含、宏等来混淆它。
我是否应该在另一个文件夹中创建另一个主.cpp文件,例如:test/
将包含所有特定的 gtest 配置,所以我最终会得到:
src/
-> MyType.h
-> main.cpp
-> Makefile // Makefile for producing production code/binaries
Test/
-> MyTypeTest.h // Unittest for MyType
-> main.cpp // The "Test runner"
-> Makefile // Makefile for producing test executable
编辑:
根据 cmake 找到这个:
http://www.kaizou.org/2014/11/gtest-cmake/
这似乎正是我正在寻找的。
最明智的方法是为生产代码提供一个库,然后有两个可执行文件,一个用于生产,另一个用于测试:
|-lib/
| |-Makefile
| |-mytype.h
| `-mytype.cpp
|-app/
| |-Makefile
| `-main.cpp
`-test/
|-Makefile
`-mytypetest.cpp
请注意,gtest 发行版为测试可执行文件提供了具有标准 main 函数的gtest
库和gtest_main
库。因此,除非您需要自定义主(极少数情况),否则您无需为测试提供main.cpp
,只需链接到gtest_main
,例如 $(CC) mytypetest.cpp -o apptests -lapplib -lgtest_main -lgtest
.
库方法涉及稍微复杂的Makefile
,但它在编译时间是有回报的,因为没有它意味着您需要为生产应用程序编译一次mytype.cpp
,为测试可执行文件编译一次。
方法可以做到这一点,但一般来说,是的,你应该在你的项目中添加一个特定于测试的主函数。这使得编译稍微复杂一些,因为您必须生成两个单独的二进制文件(一个用于应用程序,另一个用于测试),但这是一个相当典型的设置。
我只需添加一个带有 main 的 test.cpp 文件,并在我的 makefile 中创建一个test
目标,这样我就可以make
- 构建我的生产代码 - 或make test
- 构建测试。在实际项目中,我以非常相似的方式使用 cmake(我有时会将所有常见的依赖项捆绑在一个 core.a
库中,然后链接 main 并针对它进行测试)。
- C++代码以测试另一个.cpp如果可以编译它
- 我如何测试代码没有调用 exit()
- 如何在使用 C 函数时测试C++代码
- 谷歌基准测试,如何只调用一次代码?
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 使用 bash 脚本和测试处理进行代码编辑
- 使用 std::chrono::steady_clock 对线程/异步中的代码进行基准测试
- 使用 googletest 测试嵌入式C++代码时处理外设寄存器的重复符号
- 编写可测试的代码 - lambda 函数和unique_ptr中的basic_istream工厂
- 用于查找连续子数组的最大总和的代码使测试用例失败
- 外部 "C" Visual Studio 2015 中的显式类型错误,DLL 测试代码
- 如何对嵌入式代码进行单元测试?
- std::sort / 适用于测试代码,但无法推断出模板
- 有什么方法可以从Visual Studio 2017中的Catch C++测试中获取代码覆盖率指标?
- 用于 JUnit 测试的本机代码未使用 'nar-maven-plugin' 编译
- 如何避免使用IFDEF使代码更具测试
- 使用示例代码测试 mongocxx c++ 驱动程序
- 如何根据头文件中定义的代码测试类
- 工作与现有的c++代码测试下的谷歌测试和添加Qt
- 漂亮的打印 - 使用格式不正确的C++代码测试漂亮的打印机