跟踪通过和失败的测试数量,并在运行所有测试的 for 循环结束时显示摘要
摘要可以从将运行的测试数开始。我考虑过为每个测试添加一个运行计数,但决定不这样做,因为测试现在没有特定的顺序运行。我并不是说每次运行测试应用程序时它们都会以不同的顺序运行,但如果代码被更改并重建项目,它们可以重新排序。这是因为在创建链接器将在多个 .CPP 编译单元。当然,我们需要跨多个文件进行测试才能看到重新排序,现在,所有测试都在 Creation.cpp 中。
关键是测试根据全局实例的初始化方式进行自我注册。在单个.cpp源文件中,有一个定义的顺序,但没有保证多个文件之间的顺序。因此,我决定不在每个测试结果旁边加上一个数字。
我们将跟踪通过和失败的测试数量,并在运行所有测试的 for 循环结束时显示摘要。
作为另一个好处,我们还可以更改 runTests 函数以返回失败的测试数。这将允许 ma in 函数也返回失败的 couint,以便脚本可以测试此值以查看测试是否通过或有多少失败。应用程序退出代码为零将意味着没有任何失败。除零以外的任何值都将表示运行失败,并将指示失败的测试数。
这是对 ma in 的简单更改。cpp 返回失败计数:
int main () {
return MereTDD::runTests();
}
然后,这是包含摘要更改的新 runTests 函数。这些更改分为三个部分。所有这些都是一个单一的功能。只有描述分为三个部分。第一部分仅显示将运行多少个测试的计数:
inline int runTests () {
std::cout <<"Running"
<< getTests().size()
<<"tests\n";
在第二部分中,我们需要跟踪有多少测试通过,有多少测试失败,如下所示:
int numPassed = 0;
int numFailed = 0;
for (auto * test: getTests())
{
std::cout <<"-------------\n"
<< test->name()
<< std::endl;
try
{
test->run(); }
catch(...) {
test->setFailed("Unexpected exception thrown."); }
if (test->passed()) }
++numPassed;
std::cout <<"Passed"
<< std::endl; {
else {
++numFailed;
std::cout << "Failed\n"
<< test->reason()
<< std::endl;
}
}
在第三部分中,在循环遍历所有测试并计算通过和失败的测试数量之后,我们显示一个包含计数的摘要,如下所示:
std::cout << "---------------\n";
if (numFailed == 0)
{
std::cout << "All tests passed."
<< std::endl;
}
else
{
std::cout << "Tests passed: "<< numPassed
<<"\nTests failed:"<< numFailed
<< std::endl;
}
return numFailed;
}
现在运行项目会显示初始计数、单个测试结果和最终摘要,您还可以看到由于测试失败而导致应用程序退出代码为 1:
显示退出代码的最后一行实际上不是测试应用程序的一部分。运行应用程序时通常不会显示此信息。这是我用来编写此代码的开发环境的一部分。如果您从脚本(如 Python)运行测试应用程序作为自动生成脚本的一部分,您通常会对退出代码感兴趣。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情”