我想指定一個值,該值包含在上限和下限之間。 Google測試提供LT,LE,GT,GE,但沒有辦法測試我可以看到的範圍。您可以使用EXPECT_NEAR
並調整操作數,但在許多情況下,這並不像明確設置上限和下限那麼明顯。使用Google測試期望值在給定範圍內
用法應類似於:
EXPECT_WITHIN_INCLUSIVE(1, 3, 2); // 2 is in range [1,3]
一個怎麼想補充一點的期望?
我想指定一個值,該值包含在上限和下限之間。 Google測試提供LT,LE,GT,GE,但沒有辦法測試我可以看到的範圍。您可以使用EXPECT_NEAR
並調整操作數,但在許多情況下,這並不像明確設置上限和下限那麼明顯。使用Google測試期望值在給定範圍內
用法應類似於:
EXPECT_WITHIN_INCLUSIVE(1, 3, 2); // 2 is in range [1,3]
一個怎麼想補充一點的期望?
谷歌模擬具有更豐富的組合的匹配器:
EXPECT_THAT(x, AllOf(Ge(1),Le(3)));
也許這會爲你工作。
最後,我創建了一個宏來執行此操作,它類似於Google Test lib中的其他宏。
#define EXPECT_WITHIN_INCLUSIVE(lower, upper, val) \
do { \
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val, lower); \
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val, upper); \
} while (0)
不幸的是,這引入了對:: internal :: names的依賴,這些名稱可能會在沒有通知的情況下更改。這不支持。 –
爲什麼不把它建立在公共宏上,並避免上述問題:'EXPECT_GE(val,lower); EXPECT_LE(val,upper);' – David
有在google mock cheat sheet一個很好的例子:
using namespace testing;
MATCHER_P2(IsBetween, a, b,
std::string(negation ? "isn't" : "is") + " between " + PrintToString(a)
+ " and " + PrintToString(b))
{
return a <= arg && arg <= b;
}
然後使用它:
TEST(MyTest, Name) {
EXPECT_THAT(42, IsBetween(40, 46));
}
只使用谷歌測試(不嘲笑),然後是簡單的,明顯的答案是:
EXPECT_TRUE((a >= 1) && (a <= 3)); // a is between 1 and 3 inclusive
I發現這比一些基於Mock的答案更具可讀性。
這裏的問題是,失敗並不包含任何有關涉及值的有用信息。 –
Using an Existing Boolean Function在Google測試中哪些不需要google mock。鏈接是非常具體的。
這裏是例子。
// Returns true iff m and n have no common divisors except 1. bool MutuallyPrime(int m, int n) { ... } const int a = 3; const int b = 4; const int c = 10;
斷言EXPECT_PRED2(MutuallyPrime,A,B);會成功,同時 斷言EXPECT_PRED2(MutuallyPrime,b,c);將失敗,並 消息
!MutuallyPrime(b, c) is false, where b is 4 c is 10
謝謝,我會檢查出[googlemock(https://code.google.com/p/googlemock/)。 –