unit-testing - boost 测试 : How to write parameterized test cases

标签 unit-testing boost boost-test parameterized-unit-test

我有一个 boost 测试用例。无论参数如何,都会执行此测试用例的大多数行。但是有些部分是根据提供的参数执行的。我想避免编写两个单独的测试用例,除了一些小部分之外,它们几乎完全相同。所以我需要使用类似以下方法来创建参数化测试用例:

BOOST_FIXTURE_TEST_CASE(caseA, Fixture)
{
    TestFunction("parameterA");
}

BOOST_FIXTURE_TEST_CASE(caseB, Fixture)
{
    TestFunction("parameterB");
}

void TestFunction(string param)
{
    // ...
    // lots of common checks regardless of parameters
    // ...
    if(param == "parameterA")
        BOOST_CHECK(...);
    else if(param == "parameterB")
        BOOST_CHECK(...);
}

有没有其他方法可以更方便地实现我的目标?我可以找到 BOOST_PARAM_CLASS_TEST_CASE宏,但我不确定它在这种情况下是否相关。

最佳答案

没有 Boost 支持 AFAIK,所以我这样做:

void test_function(parameters...)
{
    <test code>
}

BOOST_AUTO_TEST_CASE(test01) {
    test_function(parameters for case #1)
}

BOOST_AUTO_TEST_CASE(test02) {
    test_function(parameters for case #2)
}

如果您喜欢模板,您可以使用它们:
template<int I, bool B>
void test_function()
{
    for(int i=0; i<I; i++)
        if (B) BOOST_REQUIRE(i<10);
}

BOOST_AUTO_TEST_CASE(test01) {
    test_function<10, true>();
}

BOOST_AUTO_TEST_CASE(test02) {
    test_function<20, false>();
}

关于unit-testing - boost 测试 : How to write parameterized test cases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14195819/

相关文章:

C++:不区分大小写的 "Boost:unordered_map"不起作用?

c# - 具有插件架构的应用程序中的单元测试插件

C++ 让 boost 线程等待 1 秒

c++ - Boost.Geometry Correct() 失败

c++ - 使用 Boost::Test 测试 DLL?

c++ - Boost.Test - 问题覆盖主要

c++ - Boost.Spirit 的单元测试

unit-testing - Aurelia 单元测试访问组件的 viewModel

reactjs - React Native 如何在 1 个特定测试中模拟 PixelRatio

c# - 模拟 IList 的单元测试方法