标签: boost-test

C++单元测试框架的比较

我知道关于C++单元测试框架的建议已经存在一些问题,但所有答案都没有帮助,因为他们只是推荐其中一个框架,但没有提供有关(特征)比较的任何信息.

我认为最有趣的框架是CppUnit,Boost和新的Google测试框架.有人做过任何比较吗?

c++ unit-testing cppunit googletest boost-test

287
推荐指数
7
解决办法
25万
查看次数

CMake:具有单元测试的项目结构

我正在尝试构建我的项目以包含生产源(在src子文件夹中)和测试(在test子文件夹中).我正在使用CMake来构建它.作为一个最小的例子,我有以下文件:

的CMakeLists.txt:

cmake_minimum_required (VERSION 2.8) 
project (TEST) 

add_subdirectory (src) 
add_subdirectory (test) 
Run Code Online (Sandbox Code Playgroud)

SRC /的CMakeLists.txt:

add_executable (demo main.cpp sqr.cpp) 
Run Code Online (Sandbox Code Playgroud)

SRC/sqr.h

#ifndef SQR_H
#define SQR_H
double sqr(double);    
#endif // SQR_H
Run Code Online (Sandbox Code Playgroud)

SRC/sqr.cpp

#include "sqr.h"
double sqr(double x) { return x*x; }
Run Code Online (Sandbox Code Playgroud)

src/main.cpp - 使用sqr,并不重要

测试/的CMakeLists.txt:

find_package(Boost COMPONENTS system filesystem unit_test_framework REQUIRED)

include_directories (${TEST_SOURCE_DIR}/src) 

ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK) 

add_executable (test test.cpp ${TEST_SOURCE_DIR}/src/sqr.cpp) 

target_link_libraries(test
                      ${Boost_FILESYSTEM_LIBRARY}
                      ${Boost_SYSTEM_LIBRARY}
                      ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}
                      )

enable_testing()
add_test(MyTest test)
Run Code Online (Sandbox Code Playgroud)

测试/ TEST.CPP:

#define BOOST_TEST_MODULE SqrTests
#include <boost/test/unit_test.hpp>

#include "sqr.h"

BOOST_AUTO_TEST_CASE(FailTest)
{
    BOOST_CHECK_EQUAL(5, sqr(2));
} …
Run Code Online (Sandbox Code Playgroud)

c++ boost unit-testing cmake boost-test

127
推荐指数
2
解决办法
8万
查看次数

单元测试DLL中的非导出类

我们使用Visual Studio 2008开发C++应用程序,并使用Boost.Test进行单元测试.目前,我们有一个单独的解决方案,其中包含我们的单元测试.

我们在核心解决方案中的许多项目都会产生DLL.我们的测试覆盖范围有限,因为我们无法测试非导出类.

我有两个关于如何测试它们的想法:

  1. 出口一切
  2. 将测试放在DLL(相同的项目和解决方案)中,并使用Boost.Test的外部运行器

我不完全确定会有什么缺点.上面的数字1打破了模块级封装,数字2可能导致更大的DLL,除非可能只在某些配置中包含测试代码.

那么,上述方法有任何严重的缺点,还是你能想到其他解决方案?

c++ unit-testing boost-test visual-studio

29
推荐指数
1
解决办法
6691
查看次数

如何使用Boost.Test指定应该预期的异常?

我有一个Boost单元测试用例,它会导致被测对象抛出异常(这是测试,导致异常).如何在测试中指定期望该特定异常.

我可以通过使用BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES来指定测试应该有一定数量的失败,但这似乎是非特定的.我希望能够在测试中的特定点说出应该抛出异常并且不应将其视为失败.

c++ unit-testing exception boost-test

26
推荐指数
2
解决办法
9746
查看次数

在Boost测试框架中测试assert

我使用Boost Test框架对我的C++代码进行单元测试,并想知道是否可以测试函数是否会断言?是的,听起来有点奇怪,但请忍受我!我的许多函数在输入时检查输入参数,断言它们是否无效,并且测试它是有用的.例如:

void MyFunction(int param)
{
    assert(param > 0); // param cannot be less than 1
    ...
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

BOOST_CHECK_ASSERT(MyFunction(0), true);
BOOST_CHECK_ASSERT(MyFunction(-1), true);
BOOST_CHECK_ASSERT(MyFunction(1), false);
...
Run Code Online (Sandbox Code Playgroud)

你可以检查使用Boost测试抛出的异常,所以我想知道是否还有一些断言魔法......

c++ boost unit-testing assert boost-test

20
推荐指数
3
解决办法
9989
查看次数

使用Jenkins和boost.test单元测试

我在这个领域做了一些谷歌搜索,发现了许多关于让Jenkins了解boost.test的XML输出格式的讨论,但没有规范的参考.

有人说我们只需要使用XLST来转换XML格式,其他人则建议XML在此之前需要一些黑客攻击(任何人都有一个XSL将Boost.Test XML日志转换为可呈现的格式?).有人建议xUnit插件可以原生地理解boost.test XML格式,其他人声明它不能

因为我的搜索结果是5年,所以我意识到事情可能会发生变化.所以我正在寻找关于使用Jenkins运行和评估增强单元测试的最佳方法的最新答案.

c++ boost-test jenkins

20
推荐指数
1
解决办法
7562
查看次数

提升测试链接

我想Boost test在我的项目中使用.

我在我的项目中使用cmake所以我写了一个简单CMakeList.txt的包装它:

find_package (Boost COMPONENTS unit_test_framework REQUIRED)
file(GLOB_RECURSE UnitTests_sources tests/*.cpp)
add_executable(UnitTests
    ${UnitTests_sources}
)
enable_testing()
ADD_TEST (UnitTests UnitTests)
Run Code Online (Sandbox Code Playgroud)

所以,cmake在这里工作得很好.编译过程中出现问题:

链接CXX可执行文件../../bin/UnitTests

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/../../../../lib/crt1.o:在函数_start': (.text+0x20): undefined reference tomain中'collect2:ld返回1退出状态

这是tests文件夹(LogManagerTest.cpp)中唯一的文件:

#include "Utils/LogManager.hpp"
#include <boost/test/unit_test.hpp>

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN

#define BOOST_TEST_MODULE LogManager

BOOST_AUTO_TEST_CASE(LogManagerCase)
{
    BOOST_REQUIRE(true);
    /*LogManager manager;
    manager.Initialize();
    manager.Deinitialize();*/
}
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

c++ linker boost unit-testing boost-test

16
推荐指数
2
解决办法
2万
查看次数

如何在基于CMake的项目中使用Boost.Test?

我的项目使用CMake作为其构建系统,我希望它能够执行我的Boost.Test测试用例.

我怎样才能做到这一点?在Boost.Build中,我可以这样做:

import testing ;

use-project /my_lib : ../src ;

unit-test my_test
          : my_test.cpp
            /my_lib
          boost_unit_test_framework
        ;

lib boost_unit_test_framework ;
Run Code Online (Sandbox Code Playgroud)

c++ boost cmake boost-test

15
推荐指数
2
解决办法
8283
查看次数

boost.test与CppUnit

我一直在使用CppUnit已经有一段时间了(我很满意).当我们使用boost库的越来越多的部分时,我对boost.test进行了简短介绍,现在我想知道是否应该在新项目中切换到boost.test.

谁能在这里告诉我两个框架之间的差异以及使用boost.test的好处(如果有的话)?

c++ boost cppunit boost-test

14
推荐指数
2
解决办法
1万
查看次数

每次使用不同的夹具多次执行一个测试用例

我有一个测试用例,我想为不同的数据库状态执行.我将对象插入到夹具中的DB(我想保持这种方式).我想为数据库中的不同配置创建DB虚拟化和专用夹具的初始化方法.

我能想到的一种方法是做一些事情:

void doTest(){
    //test code here
}

BOOST_FIXTURE_TEST_CASE(test1, fixture1)
{
    doTest();
}

BOOST_FIXTURE_TEST_CASE(test2, fixture2)
{
    doTest();
}

BOOST_FIXTURE_TEST_CASE(test3, fixture3)
{
    doTest();
}
Run Code Online (Sandbox Code Playgroud)

但是有更清洁,更整洁的方式吗?或许我不应该完全这样做?我将非常感谢测试专家给出的任何建议.

c++ boost fixtures mt boost-test

13
推荐指数
1
解决办法
1865
查看次数