gpt4 book ai didi

testing - 使用 boost.test 的复杂检查方法

转载 作者:行者123 更新时间:2023-11-28 20:32:41 25 4
gpt4 key购买 nike

我想测试字符串类的不同构造函数。因此,我自己编写了一个测试方法来检查一些标准的东西:

void checkStringStandards(String& s, size_t length, const char* text){
BOOST_CHECK_EQUAL(s.length(), length);
...
}

然后我添加了一个测试方法

BOOST_AUTO_TEST_CASE(String_construct){
String s1;
checkStringStandards(s1, 0, "");

String s2("normal char");
checkStringStandards(s2, 11, "normal char");
}

问题是,当它失败时,我只能从 checkStringStandards 中获取行和文件信息!我无法通过输出知道是第一个调用还是第二个调用导致了此问题。

常见的解决方法是什么?

干杯!

最佳答案

这个问题的解决方案是编写一个执行检查的自定义谓词,并在不同的测试用例中使用 BOOST_REQUIRE(custom_predicate(args))。自定义谓词可以采用您想要的任何参数并返回 boost::test_tools::predicate_result ,一种与 Boost.Test 中的断言宏兼容的类型,您可以在失败期间在其中构建详细的诊断消息。

使用你的例子:

using namespace boost::test_tools;
predicate_result checkStringStandards(String& s, size_t length, const char* text) {
predicate_result result{true};
if (s.length() != length) {
result = false;
result.message() << "\nString " << s
<< " differs in length; expected: "
<< length << ", actual: " << s.length();
}
...
return result;
}

BOOST_AUTO_TEST_CASE(String_construct){
String s1;
BOOST_REQUIRE(checkStringStandards(s1, 0, ""));

String s2("normal char");
BOOST_REQUIRE(checkStringStandards(s2, 11, "normal char"));
}

消息开头的奇怪 \n 是为了在打印诊断时,带有“String ... differs in length”的文本将在其自己的行中发出。如果谓词失败,它将失败冒泡到 BOOST_REQUIRE,这将触发测试失败并在调用 BOOST_REQUIRE 的行报告失败,而不是在您的自定义谓词中。

还有另一种更令人讨厌的替代方法,它通过将您的自定义断言作为巨大的巨型宏来实现相同的结果,但我发现这太可怕了,我什至不打算展示如何做的例子:)。

关于testing - 使用 boost.test 的复杂检查方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com