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)测试我的方法?
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)