八、Predicate Assertions
在使用EXPECT_TRUE或ASSERT_TRUE時(shí),有時(shí)希望能夠輸出更加詳細(xì)的信息,比如檢查一個(gè)函數(shù)的返回值TRUE還是FALSE時(shí), 希望能夠輸出傳入的參數(shù)是什么,以便失敗后好跟蹤。因此提供了如下的斷言:
Google人說(shuō)了,他們只提供<=5個(gè)參數(shù)的,如果需要測(cè)試更多的參數(shù),直接告訴他們。下面看看這個(gè)東西怎么用。
bool MutuallyPrime(int m, int n)
{
return Foo(m , n) > 1;
}
TEST(PredicateAssertionTest, Demo)
{
int m = 5, n = 6;
EXPECT_PRED2(MutuallyPrime, m, n);
}
當(dāng)失敗時(shí),返回錯(cuò)誤信息:
error: MutuallyPrime(m, n) evaluates to false, where
m evaluates to 5
n evaluates to 6
如果對(duì)這樣的輸出不滿意的話,還可以自定義輸出格式,通過(guò)如下:
用法示例:
testing::AssertionResult AssertFoo(const char* m_expr, const char* n_expr, const char* k_expr, int m, int n, int k) {
if (Foo(m, n) == k)
return testing::AssertionSuccess();
testing::Message msg;
msg << m_expr << " 和 " << n_expr << " 的大公約數(shù)應(yīng)該是:" << Foo(m, n) << " 而不是:" << k_expr;
return testing::AssertionFailure(msg);
}
TEST(AssertFooTest, HandleFail)
{
EXPECT_PRED_FORMAT3(AssertFoo, 3, 6, 2);
}
失敗時(shí),輸出信息:
error: 3 和 6 的大公約數(shù)應(yīng)該是:3 而不是:2
是不是更溫馨呢,呵呵。