gpt4 book ai didi

当且仅当测试失败时,c++ gtest在测试结束时打印附加信息

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:10 26 4
gpt4 key购买 nike

我想做这样的事情:

TEST(MyTestFixture, printAfterExpectationFailure)
{
const string request("bring me tea");

const string&& response = sendRequestAndGetResponse(request);

checkResponseWithExpectarions1(response);
checkResponseWithExpectarions2(response);
checkResponseWithExpectarions3(response);
checkResponseWithExpectarions4(response);

if (anyOfExpectsFailed())
cout << "Request: " << request << "\nresponse: " << response << endl;
}

TEST(MyTestFixture, printAfterAssertionFailure)
{
const string request("bring me tea");

const string&& response = sendRequestAndGetResponse(request);

doWhenFailure([&request, &response]()
{
cout << "Request: " << request << "\nresponse: " << response << endl;
});

checkResponseWithAssertion1(response);
checkResponseWithAssertion2(response);
checkResponseWithAssertion3(response);
checkResponseWithAssertion4(response);
}

当且仅当期望/断言失败时,我想打印一些额外的信息。

我知道我可以做这样的事情:

#define MY_ASSERT_EQ(lhr, rhs, message) if(lhs != rhs) ASSERT_EQ(lhs, rhs) << message

但这种解决方案并不舒服,因为:

  1. 我检查两次
  2. 我使用预处理器,所以可能需要一些时间才能找到错误。
  3. 当函数真正嵌套时,该解决方案很难使用。
  4. 当许多 EXPECTations 失败时,它会多次打印消息。
  5. 需要为各种检查重新定义宏

最佳答案

做自己想做的事很难,其实是一种考验code smell .特别是,这两个测试 (1) 做的太多并且 (2) 不可读,因为它们没有描述被测单元的作用。

我推荐两本读物:Unit Tests are FIRST和书Modern C++ Programming with Test-Driven Development .

与其尝试调用 4 个函数,每个函数都检查一些东西,然后想知道在失败的情况下如何打印错误消息,我建议如下:

  • 问问自己:“我在这里测试什么?”当您有答案时,请使用答案为测试命名。如果你找不到答案,这意味着(我怀疑)测试做的太多了。尝试遵循“每次测试一个断言”的指导方针并相应地拆分测试。
  • 本着同样的精神,查看这 4 个函数中的每一个,并尝试为每个函数命名。如果不能,则每个函数都在检查太多。拆分这些功能。
  • 问问自己是否真的需要期望(而不是断言)。通常使用 EXPECT 而不是 ASSERT 的唯一原因是因为单个测试做的太多了。拆分它。

在此过程结束时,您应该会发现自己处于打印有关测试失败的附加信息的目标,只需使用类似以下内容即可实现:

ASSERT_THAT(Response, EQ("something")) << "Request: " << request;

注意:如果起点更好,我认为上面的例子还不够好。测试名称应该非常好,非常具有描述性,以至于通过打印 request 的值您将获得零信息。

我意识到这是一种哲学上的回答;另一方面,它直接来自于我尝试编写良好的、可维护的测试的经验。编写良好的测试需要与编写良好的代码一样的谨慎,并且会得到很多返回:-)

关于当且仅当测试失败时,c++ gtest在测试结束时打印附加信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41026939/

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