我知道关于C++单元测试框架的建议已经存在一些问题,但所有答案都没有帮助,因为他们只是推荐其中一个框架,但没有提供有关(特征)比较的任何信息.
我认为最有趣的框架是CppUnit,Boost和新的Google测试框架.有人做过任何比较吗?
我是一般编程的新手,所以我决定从C++中创建一个简单的向量类开始.但是我想从一开始就养成良好的习惯,而不是稍后尝试修改我的工作流程.
我目前只有两个文件vector3.hpp
和vector3.cpp
.随着我对一切事物越来越熟悉,这个项目将慢慢开始增长(使其更像是一般的线性代数库),因此我希望采用"标准"项目布局,以便以后更轻松.所以在环顾四周后,我发现了两种组织hpp和cpp文件的方法,第一种方法是:
project
??? src
??? vector3.hpp
??? vector3.cpp
Run Code Online (Sandbox Code Playgroud)
第二个是:
project
??? inc
? ??? project
? ??? vector3.hpp
??? src
??? vector3.cpp
Run Code Online (Sandbox Code Playgroud)
你会推荐哪个?为什么?
其次,我想使用Google C++测试框架对我的代码进行单元测试,因为它看起来相当容易使用.你认为在我的代码捆绑这一点,例如inc/gtest
或contrib/gtest
文件夹?如果捆绑了,您是否建议使用fuse_gtest_files.py
脚本来减少数量或文件,或保留原样?如果没有捆绑,这个依赖是如何处理的?
在编写测试时,这些测试通常是如何组织的?我想为每个类创建一个cpp文件(test_vector3.cpp
例如),但是所有编译成一个二进制文件,以便它们可以轻松地一起运行?
由于gtest库通常是使用cmake和make构建的,所以我认为我的项目也可以像这样构建吗?如果我决定使用以下项目布局:
??? CMakeLists.txt
??? contrib
? ??? gtest
? ??? gtest-all.cc
? ??? gtest.h
??? docs
? ??? Doxyfile
??? inc
? ??? project
? ??? vector3.cpp
??? src
? ??? vector3.cpp
??? test
??? test_vector3.cpp
Run Code Online (Sandbox Code Playgroud)
如何CMakeLists.txt
才能看到它只能构建库或库和测试?我也见过很多有a build
和a …
我最近因使用CMake编译我的C++项目而被出售,现在我想开始为我的代码编写一些单元测试.我决定使用Google Test实用程序来帮助解决这个问题,但在入门时需要一些帮助.
我一整天都在阅读各种指南和示例,包括Primer,IBM的介绍以及有关SO(此处和此处)的一些问题以及我已经忘记的其他来源.我意识到那里有很多,但不知怎的,我仍然遇到困难.
我目前正在尝试实施最基本的测试,以确认我已经编译/安装了gtest,并且它无法正常工作.唯一的源文件(testgtest.cpp)被认为几乎完全由该前面的回答:
#include <iostream>
#include "gtest/gtest.h"
TEST(sample_test_case, sample_test)
{
EXPECT_EQ(1, 1);
}
Run Code Online (Sandbox Code Playgroud)
和我关联的CMakeLists.txt如下:
cmake_minimum_required(VERSION 2.6)
project(basic_test)
# Setup testing
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIR})
# Add test cpp file
add_executable(runUnitTests
testgtest.cpp
)
# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})
add_test(
NAME runUnitTests
COMMAND runUnitTests
)
Run Code Online (Sandbox Code Playgroud)
请注意,我选择链接gtest_main而不是在cpp文件的末尾提供main,因为我相信这将允许我更容易地将测试扩展到多个文件.
构建生成的.sln文件(在Visual C++ 2010 Express中)时,我很遗憾地得到了一个很长的表单错误列表
2>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的项目编写一个函数/方法,它将向用户询问您要运行的所有测试用例?它看起来像......
Test_Cases_1
|_TestNo1
|_TestNo2....so on
Test_Cases_2
|_TestNo1
|_TestNo2....so on
....
....so on
Test_Cases_N
|_TestNo1
|_TestNo2....so on
Run Code Online (Sandbox Code Playgroud)
那么,现在的挑战是在运行项目时它应该提示我想要执行的所有测试用例?如果我选择Test_Cases_1
和Test_Cases_N
.然后它应该执行这两个测试用例,并应排除所有其他测试用例Test_Cases_2 to ....
.在结果窗口也是我希望看到的结果Test_Cases_1
和Test_Cases_N
.
所以,如果我看到GoogleTest,就会有一个方法叫做test_case_to_run_count()
; 但是所有的test cases
都是通过Test_F()方法注册的.所以,我做了很多分析,但仍未找到任何解决方案.请帮我.
使用Google Test 1.6(Windows 7,Visual Studio C++).我怎样才能关闭给定的测试?(又如何阻止测试运行).除了评论整个测试之外,还有什么可以做的吗?
它没有记录在网站上,人们似乎在设置框架时遇到了问题.有人可以逐步介绍示例项目设置.
c++ unit-testing visual-studio-2005 googletest visual-studio
Debian不再为gTest提供任何预编译的包.他们建议您将框架集成到项目makefile中.但我想保持make文件干净.如何设置gTest像以前的版本(<1.6.0),以便我可以链接aganist库?
问题是谷歌测试框架.我想根据多个排除过滤器运行除排除一些测试之外的所有测试,例如:
--gtest_filter=-ABC.*:-BCD.*
我想在谷歌测试中比较两个数组.在UnitTest ++中,这是通过CHECK_ARRAY_EQUAL完成的.你是如何在谷歌测试中做到的?
我使用Google C++ Testing Framework进行代码的单元测试.我使用Eclipse CDT和C++单元测试模块进行输出分析.
以前我用CppUnit它有宏家族 CPPUNIT*_MESSAGE,可以像这样调用:
CPPUNIT_ASSERT_EQUAL_MESSAGE("message",EXPECTED_VALUE,ACTUAL_VALUE)
Run Code Online (Sandbox Code Playgroud)
并允许发送自定义消息以测试输出.
有没有办法在谷歌测试输出中包含一些自定义文本?
(最好是包含使用谷歌测试自动单元测试的现有程序读取的数据消息的方式.)
googletest ×10
c++ ×7
unit-testing ×5
cmake ×2
boost-test ×1
cppunit ×1
doxygen ×1
installation ×1
linux ×1