C++ Test:寻找一个工作正常的测试套件示例/教程

C++ Test:寻找一个工作正常的测试套件示例/教程,c++,unit-testing,boost,tcp,mocking,C++,Unit Testing,Boost,Tcp,Mocking,和示例似乎并不包含任何不重要的示例,到目前为止,我发现的两个教程和虽然很有帮助,但都是相当基本的 我想为整个项目提供一个主测试套件,同时维护可以独立运行的单元测试和装置的每个模块套件。我还将使用模拟服务器来测试各种网络边缘情况 我使用的是Ubuntu8.04,但我会以Linux或Windows为例,因为我正在编写自己的makefiles 编辑 作为测试,我做了以下工作: // test1.cpp #define BOOST_TEST_MODULE Regression #include <

和示例似乎并不包含任何不重要的示例,到目前为止,我发现的两个教程和虽然很有帮助,但都是相当基本的

我想为整个项目提供一个主测试套件,同时维护可以独立运行的单元测试和装置的每个模块套件。我还将使用模拟服务器来测试各种网络边缘情况

我使用的是Ubuntu8.04,但我会以Linux或Windows为例,因为我正在编写自己的makefiles

编辑

作为测试,我做了以下工作:

// test1.cpp
#define BOOST_TEST_MODULE Regression
#include <boost/test/included/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test1_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(2 < 1);
}

BOOST_AUTO_TEST_SUITE_END()

// test2.cpp
#include <boost/test/included/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test2_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(1<2);
}

BOOST_AUTO_TEST_SUITE_END()
//test1.cpp
#定义BOOST_测试_模块回归
#包括
BOOST\u AUTO\u TEST\u套件(test1\u套件)
增压自动测试案例(测试1)
{
增压检查(2<1);
}
BOOST\u AUTO\u TEST\u SUITE\u END()
//test2.cpp
#包括
BOOST\u AUTO\u TEST\u套件(test2\u套件)
增压自动测试案例(测试1)
{

BOOST_CHECK(1除了后面的教程,我不知道你还需要什么。我已经用这种方式做了所有我需要做的事情。我也不确定我是否理解你的描述

您可能要求的一件事是在测试程序中能够有多个.cpp文件。这很简单,只需在其中一个.cpp文件中定义BOOST_test_模块。我们在所有测试程序中都有一个“driver.cpp”文件,它只定义了这个文件,并包括单元测试头。所有其他的.cpp文件(按模块或概念界定范围)仅包括单元测试标题,它们不定义该变量

如果您想同时编译它们和单独编译它们,那么您可以使用您自己的-D变量来定义BOOST_TEST_模块

如果您正在寻找一种方法,在一次运行中运行一组测试程序并获得一份报告,那么您可以查看执行测试的自动生成方法,或者更好的是,CMake方法(CTest)。如果您坚持,您可以从自己的生成文件中使用CTest。

(永久链接:)

以上是一篇精彩的文章,比实际的Boost文档要好

编辑:

我还编写了一个Perl脚本,它将 自动生成makefile和项目 从类名列表中提取骨架, 包括“一体式”测试 套件和一个独立的测试套件 每节课,它叫 并且可以下载 来自Sourceforge.net

我发现的基本问题是,如果要将测试拆分为多个文件,则必须针对预编译的测试运行时进行链接,而不是使用“仅标题”Boost.Test的版本。您必须向每个文件添加
#define Boost\u Test\u DYN\u LINK
,例如,在包含Boost头文件时,使用
而不是

因此,要编译为单个测试:

g++ test_main.cpp test1.cpp test2.cpp -lboost_unit_test_framework -o tests
或编译单个测试:

g++ test1.cpp -DSTAND_ALONE -lboost_unit_test_framework -o test1

//test\u main.cpp
#定义BOOST\u TEST\u DYN\u链接
#定义升压测试主模块
#包括
//test1.cpp
#定义BOOST\u TEST\u DYN\u链接
#如果你单独站着
#定义升压测试主模块
#恩迪夫
#包括
BOOST\u AUTO\u TEST\u套件(test1\u套件)
增压自动测试案例(测试1)
{

BOOST_CHECK(2当我只从BOOST开始时。使用源代码测试以下文章非常有用:

作为一个测试,我创建了两个包含自动测试套件和自动测试用例的文件,并且只在其中一个文件中定义了
BOOST\u test\u模块
。在链接过程中,我发现了大量“多重定义”错误。当所有这些都在一个文件中时,一切都可以正常工作。尝试不使用BOOST\u auto\u test\u套件()定义。我不使用它。如果使用该宏,可能需要的步骤略有不同。如果是这种情况,尝试删除它们将解决生成错误,如果确实需要它们,则需要进行一些进一步的实验。此外,不要将两个测试都命名为Test1。当两个测试同时运行时,我遇到了问题n个不同的文件具有相同的名称。事实上,请先尝试修复该名称。是的,在查看下面在注释中发布的链接后,该链接包含与编辑代码类似的代码(并且有两个Test1定义)我认为一个测试的多重定义是一个问题。链接教程不共享此功能,甚至在不同的套件中使用不同的名称。+1谢谢,如果你感兴趣,我终于想出了整个解决方案。是的,我很感兴趣。我有一些有用的东西,但总是对新方法持开放态度。如果您可以编辑链接以指向页面顶部,而不是注释。@danio:编辑了链接,并添加了一个指向Perl脚本的链接,该脚本将自动生成makefile、project skeleton和unit test Suite。我认为这一个也很好:您使用的UTF的单头变体仅适用于单个文件。这个“小细节”是:此变体不能与多文件测试模块一起使用。
// test_main.cpp
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Main
#include <boost/test/unit_test.hpp>

// test1.cpp
#define BOOST_TEST_DYN_LINK
#ifdef STAND_ALONE
#   define BOOST_TEST_MODULE Main
#endif
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test1_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(2<1);
}

BOOST_AUTO_TEST_SUITE_END()

// test2.cpp
#define BOOST_TEST_DYN_LINK
#ifdef STAND_ALONE
#   define BOOST_TEST_MODULE Main
#endif
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test2_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(1<2);
}

BOOST_AUTO_TEST_SUITE_END()