使用 GoogleTest 进行复合测试?

Compound Tests with GoogleTest?

如果我有类似的东西:

ASSERT_TRUE(RANGE(val1, val2, abs_err) || RANGE(val1, val3, abs_err));

如何使用 ASSERT_NEAR 而不是 ASSERT_TRUE

我试图将语句分解为两个 ASSERT_NEAR 语句,如下所示,但测试失败。

ASSERT_NEAR(val1, val2, abs_err);
ASSERT_NEAR(val1, val3, abs_err);

您的用例是:这两个条件中的任何一个都应该为真。 所以使用 ::testing::AnyOf(m1,m2,...)!

匹配器世界中 ASSERT_NEAR(lhs,rhs,max_error) 的等效项是 ::testing::DoubleNear(rhs,max_error) - 因此您的示例将如下所示:

ASSERT_THAT(val1, AnyOf(DoubleNear(val2, abs_err),
                        DoubleNear(val3, abs_err)));

如果您需要两个条件都为真 - 使用 ::testing::AllOf - 实际上您的尝试等同于 AllOf - 这就是它失败的原因。