问题标签 [googlemock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7817 浏览

c++ - C++,谷歌测试/模拟:测试和对象类型的断言

我有这个(不是真的,只是一个简单的例子):

我需要检查函数的结果类型(这里没有任何意义,我保证我的例子更复杂),谷歌测试/模拟是否支持这种断言?

我尝试使用 A<T> 的 EXPECT_THAT,但我无法做到这一点。

谢谢。

0 投票
3 回答
345 浏览

c++ - 使用模拟测试迭代代码 - 是否有意义,如何?

我想使用模拟测试算法。该算法 - 在当前实现中 - 在多个通道中迭代容器类,并从中获取 set()s 和 get()s 值。测试的目的是验证最终结果,存储在容器中。最终值取决于在通道之间读取和写入的值。例如,任何元素的值可能会多次更改,直到算法完成,并且最有可能的是,它作为迭代 n 的结果的值将取决于它在迭代 n-1 之后的值。

我喜欢模拟的想法,我很想在上述场景中使用它们,因为它可以让我在算法发生错误行为时验证它,而不仅仅是在计算完成时。但是,我不确定这是否真的是一个好主意,因为我必须将模拟真实的期望与当前实现联系起来(例如,“期望 get(element n) 并返回 x,然后 set(元素 n,值 x+1),另一个 get(n) 并返回 x+1,然后期望 set(n, x+2) 等")。

虽然允许我验证中间值是否符合预期,但我认为这样的预期会与测试的目的相矛盾(验证算法是否计算出正确的最终值),并且如果实现发生变化,测试可能会失败,而不管正确性如何最终值。

现在我的问题是:我错过了什么吗?不过,在这种情况下是否有一种使用模拟的好方法?还是在这里使用它们根本没有意义?其他人如何处理这个问题?

最后一句话:我说的是测试 c++ 代码和使用 googlemock,如果这对你的答案有任何影响的话。

ps:我在这里查看了谷歌和文章(特别是Mocking迭代行为- 只解决了增加返回值的问题),但是,我没有找到任何接近我的问题的东西。

0 投票
1 回答
10746 浏览

c++ - 尝试指定返回值时 Google Mock 给出编译错误

我正在为我的 C++/Qt 应用程序使用 Google Test 和 Google Mock。直到现在,当我尝试这个时,我一直在这个设置上取得了巨大的成功:

尝试编译它会导致来自 gcc 的以下错误消息:

如果有帮助,VertexRowtypedefaboost::shared_array<Vertex>并且Vertexstruct带有有效空构造函数的 a。

这是我为测试编写的内容中的错误,还是与使用QListor不兼容shared_array


解决方案 遵循 VJo 的建议后,我的测试编译并运行但随后崩溃:

因为没有默认的回报popAllRows_impl()。我添加了一个默认值:

对我SetUp()来说一切都很好。正如 VJo 指出的那样,没有 WillOnce() forON_CALL但有 forEXPECT_CALL我在烹饪书中错过了这个..

0 投票
5 回答
29248 浏览

c++ - Google 可以模拟具有智能指针返回类型的方法吗?

我有一个返回智能指针的工厂。无论我使用什么智能指针,我都无法让 Google Mock 模拟工厂方法。

模拟对象是纯抽象接口的实现,其中所有方法都是虚拟的。我有一个原型:

我得到:

定义了智能指针中指向的类型。

我知道它正在尝试访问声明为私有的构造函数之一,但我不明白为什么。当这是一个 std::auto_ptr 时,错误说没有复制构造函数,这让我感到困惑。

无论如何,有没有办法模拟返回智能指针的方法?或者有没有更好的方法来建造工厂?我唯一的决心是返回一个原始指针(blech ...)吗?

我的环境是 Visual Studio 2010 Ultimate 和 Windows 7。我没有使用 CLI。

0 投票
2 回答
2843 浏览

c++ - 如果预期调用过饱和,Google 测试/模拟测试失败

如果 google mocked 方法的调用次数超过预期,如何使 google 测试失败?

这是示例:

据我了解,我应该尝试

但在嵌入式项目中没有使用异常。

有任何想法吗?

0 投票
1 回答
5532 浏览

c++ - Googlemock 在测试退出时错误地报告错误。我究竟做错了什么?

Googlemock 在测试退出时错误地报告问题。我究竟做错了什么?我已经搜索了 googlemock 文档,但是没有很好的完整示例,也没有描述我遇到的问题。

我得到的错误是:

一个简单测试的代码是:

我已经用调试器验证了 IBar::~IBar() 确实被调用了。但我仍然收到此错误消息。如果我在 Foo::a() 中取消注释对 IBar::b() 的调用,则没有测试失败,因此不会调用 catch 语句。IBar::~IBar() 被调用,但没有错误消息表明模拟对象未被删除。

非常感谢您的帮助!

0 投票
4 回答
35848 浏览

c++ - google mock:我怎么能“期望”在 mock 上不会调用任何方法

我想测试一些失败的情况下,不会在模拟对象上调用任何方法,使用谷歌模拟。所以代码是这样的:

0 投票
1 回答
4580 浏览

c++ - googlemock 可以从同一类的其他方法调用中模拟方法调用吗?

是否可以从同一类的其他方法调用中模拟方法调用?我是 C++ 新手(主要是 C 开发人员),并且对 googlemock 和 Google Test 非常陌生,所以如果在其他地方回答了这个问题并且我不明白答案,请原谅我!下面是一个简单的例子,应该解释我想要做什么。使用下面的示例,我想ReturnInput在测试时模拟ReturnInputPlus1

当我运行上述测试时,我希望所有测试都能成功。相反,我得到以下输出:

0 投票
3 回答
31944 浏览

c++ - Google Mock 单元测试静态方法 c++

我刚开始进行单元测试(使用 BOOST 框架进行测试,但对于模拟我必须使用 Google Mock)并且我遇到了这种情况:

因此,我需要创建模拟类 A,并使我的 B 类不使用 A 类中的真实 Method1,而是使用模拟。

我不知道该怎么做,也找不到类似的例子。

0 投票
2 回答
5346 浏览

c++ - 谷歌模拟单元测试

我刚开始进行单元测试(使用 BOOST 框架进行测试,但对于模拟我必须使用 Google Mock)并且我遇到了这种情况:

是否可以对 B 类进行测试,以这种方式使用模拟 Method1 而不是真实方法,但不能更改 B 类?我知道这很容易: