#include <gtest/gtest.h>
::testing::AssertionResult IsBetweenInclusive(int val, int a, int b)
{
if((val >= a) && (val <= b))
return ::testing::AssertionSuccess();
else
return ::testing::AssertionFailure()
<< val << " is outside the range " << a << " to " << b;
}
TEST(testing, TestPass)
{
auto a = 2;
EXPECT_TRUE(IsBetweenInclusive(a, 1, 3));
}
TEST(testing, TestFail)
{
auto a = 5;
EXPECT_TRUE(IsBetweenInclusive(a, 1, 3));
}
// 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;
#include "gmock/gmock.h"
/// Expect or assert that value `val` is within the range of `min` to `max`,
/// inclusive. ie: `val` is tested to be >= `min` and <= `max`.
/// See:
/// 1. googletest `matchers.md` document under the "Composite Matchers" section,
/// here:
/// https://github.com/google/googletest/blob/main/docs/reference/matchers.md#composite-matchers
/// 1. [My answer with this code] https://stackoverflow.com/a/75786774/4561887
#define EXPECT_RANGE(val, min, max) EXPECT_THAT((val), \
::testing::AllOf(::testing::Ge((min)), ::testing::Le((max))))
#define ASSERT_RANGE(val, min, max) ASSERT_THAT((val), \
::testing::AllOf(::testing::Ge((min)), ::testing::Le((max))))
TEST(Simulation, TrivialEndToEnd)
{
// ...test setup stuff goes here...
// Usage example: expect that the `distance_traveled_miles` value is within
// the range 1151.77 to 1151.97, inclusive.
EXPECT_RANGE(stats->distance_traveled_miles, 1151.77, 1151.97);
}
测试失败时的错误输出也很不错,下面是测试失败时打印的内容:
src/main_unittest.cpp:194: Failure
Value of: (stats->distance_traveled_miles)
Expected: (is >= 1151.77) and (is <= 1151.97)
Actual: 1151.6666666667204 (of type double)
[ FAILED ] Simulation.TrivialEndToEnd (0 ms)
7条答案
按热度按时间bnlyeluc1#
Google Mock拥有比Google Test更丰富的组合匹配器:
也许这对你有用。
请参阅“复合匹配器”部分下的googletest
matchers.md
文档,此处stszievb2#
只使用Google Test(而不是mock),那么简单、明显的答案是:
我发现这比一些基于模拟的答案更具可读性。
---开始编辑--
上面的简单答案没有提供任何有用的诊断
您可以使用
AssertionResult
定义一个自定义Assert,该Assert确实会产生如下有用的错误消息。irlmq6kh3#
我将定义这些宏:
wgx48brx4#
谷歌模拟备忘单中有一个很好的例子:
然后使用它:
gtlvzcf85#
最后,我创建了一个宏来执行此操作,该宏类似于Google测试库中的其他宏。
zpf6vheq6#
在谷歌测试中使用现有的布尔函数,不需要谷歌模拟。链接是相当具体的。
下面是一个例子。
Assert预期预测2(互素,a,B);将成功,而AssertEXPECT_PRED2(互素,B,c);将失败并显示消息
daupos2t7#
看看这里的答案,我真的认为最美丽和完美的答案是“比利·多纳休的答案”和“ Alexandria ·沃伊坚科的答案”的结合。
所以,我的建议是,我认为这应该成为googletest/googlemock官方代码库的一部分:
快速总结
详情
下面是更完整的描述:
测试失败时的错误输出也很不错,下面是测试失败时打印的内容:
如果需要,还可以使用
<<
输出打印操作符将C++样式的打印添加到错误消息中,如下所示:如果发生故障,上一行将生成以下输出:
参考文献:
1.我第一次看到
EXPECT_THAT(x, AllOf(Ge(1),Le(3)));
的用法in @Billy Donahue's answer here。1.在“Composite Matchers”一节中了解
AllOf(m1, m2, ..., mn)
复合匹配器1.在“多参数匹配器”部分了解
Ge()
(“大于或等于”)和Le()
(“小于或等于”)匹配器