c++ - 如何每次使用不同的参数多次测试一个方法
问题描述
我正在学习如何使用 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)测试我的方法?
解决方案
Boost.Test 的官方文档在www.boost.org
:这里。
如下所示:
- 创建 2 个数据集
- 第一个数据集 - 例如 - 将包含转换器的输入值
- 第二个数据集将包含预期值
- 然后通过对数据集的操作将这两个数据集组合成一个唯一的
zip
数据集,如此处所述 - 之后的每个元素都是 2,它们在给定的两个变量中按顺序扩展
BOOST_DATA_TEST_CASE
,分别input_value
和expected_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_F
convert_instance
可以在此处找到有关记录特定类型的更多信息。
推荐阅读
- python - 如何每天或根据日期自动在表中创建新行 django
- java - 从java中的Generic类获取方法的返回值
- yagna - 绑定处理程序失败:DNS 错误:未实施;2 秒后重试
- c++ - @ 打印为一个点
- wordpress - 如何在类别的第一页上显示比第 2、3 页等更多的帖子
- c++ - 为什么在 __CUDA_ARCH__ 中包装主机代码会导致无效的设备函子错误?
- python - 如何在 Django 中从 Cloud Run 下载大文件
- python - MinimalModbus - 单个寄存器返回大于 7 字节
- javascript - 我在 Facebook 登录页面中收到“未捕获(承诺)类型错误:无法重新定义属性:cookie”js 错误。有人可以帮忙吗?
- xcode - Xcode 方案构建预操作