如何每次使用不同的参数多次测试一个方法

Van*_*nel 5 c++ boost unit-testing boost-test

我正在学习如何使用 Boost Test。

我想测试一下方法JulianToGreenWich(float jd)

#include <ctime>

class Convert
{
private:

public:
    Convert();
    ~Convert();

    tm JulianToGreenWich(float jd);
};
Run Code Online (Sandbox Code Playgroud)

为了使用 Boost Test 对其进行测试,我写下了以下代码:

struct TestFixture
{
    Convert convert_instance;

    TestFixture()
        : convert_instance()
    {}

    ~TestFixture() = default;
};

BOOST_FIXTURE_TEST_SUITE(TestConvert, TestFixture)

BOOST_AUTO_TEST_CASE(julianToGreenWichCase)
{
  BOOST_TEST(1 == 1);
  BOOST_TEST(true);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我想用许多(多个)值来测试它。为此,我一直在阅读有关BOOST_DATA_TEST_CASE_F 的内容,但似乎它需要一个数据集(而且我不知道如何创建一个并使用它)。因此,我开始在 boost 文档中阅读此内容:Datasets。但它的自定义数据集示例非常复杂。

如果我想检查是否将值(浮点数)传递给JulianToGreenWich方法 a,我将得到一个特定的tm结构。

如何使用许多对值(float jd,tm)测试我的方法?

Max*_*kin 0

IMOboost::test设计过度且文档记录不足,但它仍然可以使用其最基本的核心功能,因此当 boost 可用时,不需要安装另一个库来进行单元测试。

一种简单的方法是定义一个包含输入和预期输出的表,然后在单元测试中使用该表:

#include <ctime>

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Convert
#include "boost/test/unit_test.hpp"

namespace {

struct Convert {
    tm JulianToGreenWich(float jd);
};

tm make_tm(int year, int month, int day) {
    tm t = {};
    t.tm_year = year - 1900;
    t.tm_mon = month - 1;
    t.tm_mday = day;
    return t;
}

struct Test {
    float input;
    tm expected_output;
};

Test tests[] = {
    {         0.f, make_tm(1970, 1,  1)},
    {1560244906.f, make_tm(2019, 6, 11)},
};

BOOST_AUTO_TEST_CASE(my_test) {
    Convert c;
    for(auto& test : tests) {
        tm output = c.JulianToGreenWich(test.input);
        BOOST_CHECK_EQUAL(mktime(&output), mktime(&test.expected_output));
    }
}

} // namespace
Run Code Online (Sandbox Code Playgroud)