首页 > 解决方案 > 如何每次使用不同的参数多次测试一个方法

问题描述

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

我想测试方法JulianToGreenWich(float jd)

#include <ctime>

class Convert
{
private:

public:
    Convert();
    ~Convert();

    tm JulianToGreenWich(float jd);
};

为了用 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);
}

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

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

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

标签: c++unit-testingboostboost-test

解决方案


Boost.Test 的官方文档在www.boost.org这里

如下所示:

  • 创建 2 个数据集
    • 第一个数据集 - 例如 - 将包含转换器的输入值
    • 第二个数据集将包含预期值
  • 然后通过对数据集的操作将这两个数据集组合成一个唯一的zip数据集,如此处所述
  • 之后的每个元素都是 2,它们在给定的两个变量中按顺序扩展BOOST_DATA_TEST_CASE,分别input_valueexpected_value
BOOST_DATA_TEST_CASE( test_convert, 
  data::make({0.1f,0.2f,0.3f})^data::make({tm1,tm2,tm3}), // creates a zip of 2 datasets
  input_value, // first variable of the zip
  expected_value) // second variable of the zip
{
  Convert convertInstance;
  // this might fail to compile because tm type should not printable.
  // Adding BOOST_TEST_DONT_PRINT_LOG_VALUE on the tm type before the test
  // should solve the issue.
  BOOST_TEST(convertInstance(input_value) == expected_value); 
}

您可以使用继承BOOST_DATA_TEST_CASE的.BOOST_DATA_TEST_CASE_Fconvert_instance

可以在此处找到有关记录特定类型的更多信息。


推荐阅读