我修改了gtest / gmock,所以模拟非虚拟函数真的很容易

时间:2018-08-16 12:51:27

标签: c++ unit-testing override googletest gmock


您知道有时当某些事情不起作用并且想要快速解决时,您会得到愚蠢的主意……我的意思是真的很愚蠢的主意。但是它们以某种方式起作用。 为了能够模拟非虚拟功能,我删除了 google测试框架中的每个“替代” ,现在我的程序可以平稳运行了。
(不是一个bug。它可以按预期工作。)

所以我的问题是。 这种方法有多危险?我是 愚蠢 吗?

我之所以得出这个结论是因为写覆盖的唯一两个原因是:

  • 使代码更具可读性
  • 编译器会检查它是否实际上是一种覆盖(保护您)的方法

我正在使用c ++

1 个答案:

答案 0 :(得分:2)

我不想成为坏消息的承担者,但是通过删除那些Array.from(document.querySelectorAll(".primary li a")).forEach((element,index) => { element.classList = ""; }); ,您失去了安全性,无法用众所周知的脚开枪。

非病毒功能不会添加到V表中。这意味着如果您执行以下操作:

overrides

您将没有虚拟函数调用,即,如果您在class Foo { public: int doThings() { return 42; }; } class MockFoo : public Foo { public: int doThings() { return -1; }; } 上调用doThings(),您将始终调用Foo*并获得Foo::doThings() ,无论基础对象是Foo还是MockFoo。换句话说:

42

总是会导致class Bar { public: int doBarThings(Foo* foo) { return foo->doThings() + 10; }; } TEST_F(BarTest, doThings) { Bar bar; MockFoo mockFoo; bar->doBarThings(&mockFoo); } 被调用(即使您提供了Foo::doThings()),因为MockFoo需要一个Bar::doBarThings(Foo* foo)指针,并且Foo中的功能doThings()是非虚拟的。