Ответ 1
Google mock имеет более богатые составные сокеты:
EXPECT_THAT(x, AllOf(Ge(1),Le(3)));
Возможно, это сработает для вас.
Я хочу указать, что значение находится между верхней и нижней границами, включительно.
Google Test предоставляет LT, LE, GT, GE, но не позволяет тестировать диапазон, который я могу видеть. Вы можете использовать EXPECT_NEAR
и жонглировать операндами, но во многих случаях это не так ясно, как явное определение верхней и нижней границ.
Использование должно напоминать:
EXPECT_WITHIN_INCLUSIVE(1, 3, 2); // 2 is in range [1,3]
Как добавить это ожидание?
Google mock имеет более богатые составные сокеты:
EXPECT_THAT(x, AllOf(Ge(1),Le(3)));
Возможно, это сработает для вас.
В "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));
}
Используя только Google Test (не макет), тогда простой, очевидный ответ:
EXPECT_TRUE((a >= 1) && (a <= 3)); // a is between 1 and 3 inclusive
Я нахожу это более читаемым, чем некоторые из ответов на основе Mock.
В конце я создал макрос для этого, который напоминает другие макросы в тестовой библиотеке Google.
#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)
Использование существующей логической функции в 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