我是单元测试的新手,而不是C ++的新手。最近我在使用RSpec的Ruby中进行了测试驱动开发的一些经验。现在我正在尝试使用Boost的单元测试框架在C ++中进行类似的工作。
我正在项目的根文件夹下的目录/src
中组织应用程序的标头和源文件。正如我在其他C ++程序中多次看到的那样,在项目的根目录中的目录/tests
中进行测试似乎是合理的。
现在我想在测试中复制源文件的目录结构。因此,假设我有以下源/头文件结构:
/src
/controller
controller_class.h
controller_class.cpp
/model
model_a.h
model_a.cpp
model_b.h
model_b.cpp
/view
simple_view.h
simple_view.cpp
因此测试按照以下方式组织
/tests
TestRunner.cpp
/controller
controller_class_test.cpp
/model
model_a_test.cpp
model_b_test.cpp
/view
simple_view_test.cpp
对于TestRunner.cpp
我从this blog post获取示例:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "MyProgram Unit Tests"
#include <boost/test/unit_test.hpp>
我现在想继续在TestRunner.cpp
创建基本的测试服(控制器,模型和视图),如下所示
BOOST_AUTO_TEST_SUITE ( controller )
//some stuff here
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE ( model )
//some stuff here
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE ( view )
//some stuff here
BOOST_AUTO_TEST_SUITE_END()
但是,我现在如何将更多嵌套测试套件和案例集成到这些顶级测试套件中?我终于希望实际的测试用例只出现在*_test.cpp
文件中。虽然每个文件都将测试用例包装成一个额外的测试套件:
TestRunner.cpp
)
TestRunner.cpp
)
controller_class_test.cpp
)
controller_class_test.cpp
)TestRunner.cpp
)
model_a_test.cpp
)
model_a_test.cpp
)model_b_test.cpp
)
model_B_test.cpp
)TestRunner.cpp
)
simple_view_test.cpp
)
simple_view_test.cpp
)如何在相应的更高级套件中包含嵌套套装和案例?我在Boost文档中找不到任何内容,尽管The Unit Test Framework > User's guide > Test organization > Test suite > Automated registration非常接近
在使用RSpec的Ruby中,只需要按照我的方式放置测试文件(读取:*_spec.rb
),并自动迭代它们。我想,有了Boost,我必须明确地声明它。
答案 0 :(得分:7)
Boost.Test测试套件类似于C ++名称空间。您可以随时重启它们。每个测试文件只需要将测试用例放在正确的测试套件中:
controller_class_a_test.cpp:
BOOST_AUTO_TEST_SUITE( controller )
BOOST_AUTO_TEST_CASE( test_class_a )
{
}
BOOST_AUTO_TEST_SUITE_END()
controller_class_b_test.cpp:
BOOST_AUTO_TEST_SUITE( controller )
BOOST_AUTO_TEST_CASE( test_class_b )
{
}
BOOST_AUTO_TEST_SUITE_END()
同样的概念适用于任何深度的测试树。此外,您根本不需要顶级TestRunner.cpp。只需将所有测试文件合并到一个测试模块中,Boost.Test就会关注其余部分。