我希望在我的测试中有一个辅助方法来涵盖一些经常执行的检查。考虑这个例子:
void checkAsserts(int a, int b, int c) {
EXPECT_EQ(a, b);
EXPECT_GT(b, c);
EXPECT_TRUE(isPrime(c));
}
这样做的问题是在后面的代码中:
checkAsserts(firstVal, secondVal, thirdVal);
checkAsserts(X, Y, Z):
如果断言失败,我不知道在哪个helper中。理想情况下我会这样做
ASSERT_TRUE(checkAsserts(firstVal, secondVal, thirdVal));
ASSERT_TRUE(checkAsserts(X, Y, Z));
但是,实现这一目标的唯一方法是重复助手中的每个断言,这很糟糕:
bool checkAsserts(int a, int b, int c) {
bool passed = true;
EXPECT_EQ(a, b);
passed = passed && a == b;
EXPECT_GT(b, c);
passed = passed && b > c;
EXPECT_TRUE(isPrime(c));
passed = passed && isPrime(c);
return passed;
}
理想情况下,我想要的是这样的:
bool checkAsserts(int a, int b, int c) {
AssertSentinel sentinel;
EXPECT_EQ(a, b);
EXPECT_GT(b, c);
EXPECT_TRUE(isPrime(c));
return sentinel.failures().empty();
}
gtest 提供类似的东西吗?或者还有其他方法可以实现我的目标吗?
正如我所理解的那样,您想知道众多调用者中的哪一个导致了测试失败。
SCOPED_TRACE()
就是为了这样的目的。
SCOPED_TRACE("");
checkAsserts(firstVal, secondVal, thirdVal);
SCOPED_TRACE("");
checkAsserts(X, Y, Z):
如果
checkAsserts()
测试用例失败,它将转储文件名和最近的上范围跟踪行。
您可以使用任何有用的消息扩展范围跟踪,对我来说,空字符串对于所有情况都非常好。