问题标签 [googletest]

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 回答
558 浏览

visual-studio - 非托管 c++ 测试框架与 Visual Studio 2008 集成(GUI 测试运行器)

我喜欢 Visual Studio 单元测试框架的一件事是,所有的单元测试都是从使用 IDE 完成的,从类定义到运行测试,并使用图形绿色/红色条给出测试结果。

我同时使用 CppUnit 和 Google Test 来测试我的应用程序。给定文本输出,我非常成功地将两者集成到 Visual Studio IDE 中。

我想知道是否有人构建了一个 Visual Studio 插件,允许从 DevStudio 中运行测试并有一个图形测试运行器来提供反馈?

谢谢,

网卡

0 投票
5 回答
50704 浏览

c - Google Test 可以测试 C 代码吗?

所以我开始喜欢并喜欢在我参与的 C++ 项目中使用 Google Test。我只是提出了一个新项目,它将是纯 C(一个库),到目前为止还看不出任何原因不要继续使用 Google Test,即使它是一个 C++ 框架。拥有可用的 C++ 编译器将不是问题。

为什么我不应该使用 Google Test 来测试直接的 C 代码,是否有特定的原因?

谢谢。

0 投票
2 回答
2278 浏览

c++ - C++ 中的模拟对象是否总是需要虚拟方法或模板?

假设我有课

适当的单元测试表明我应该对Inner. 然后,我应该对此进行测试,而Outer不是使用真实Inner的,而是使用 a MockInner,这样我就可以对添加的功能执行单元测试,Outer而不是完整的堆栈Outer/ Inner

为此,Googletest似乎建议Inner变成这样的纯抽象类(接口):

所以,在生产代码中,我会使用Outer(new Inner); 在测试时,Outer(new MockInner).

好的。理论上看起来不错,但是当我开始在整个代码中使用这个想法时,我发现自己为每个该死的类创建了一个纯抽象类。即使您可以忽略由于不必要的虚拟调度而导致的轻微运行时性能下降,这是很多样板类型。

另一种方法是使用模板,如下所示:

这避免了样板化和不必要的虚拟调度;但现在我的整个代码库都在该死的头文件中,这使得隐藏源代码实现变得不可能(更不用说处理令人沮丧的模板编译错误和漫长的构建时间了)。

虚拟和模板这两种方法是进行正确单元测试的唯一方法吗?有没有更好的方法来进行适当的单元测试?

通过适当的单元测试,我的意思是每个单元测试只测试该单元引入的功能,而不是单元的依赖项

0 投票
1 回答
1469 浏览

c++ - 谷歌测试 EXPECT_EQ 和 boost::make_recursive_variant

我有一个提升递归变体,如下所示。当我使用断言比较两个递归变体对象时,它工作正常,但使用 EXPECT_EQ,它会产生编译错误。

boost/v1.46.1/include/boost/variant/detail/variant_io.hpp:64: error: no match for 'operator<<' in '((const boost::detail::variant::printer > >*)this )->boost::detail::variant::printer >>::out_ <<操作数'</p>

0 投票
2 回答
5303 浏览

c++ - Google Test C++:有没有办法在测试中读取当前控制台输出?

让我们假设我有一个要测试的类,它具有以下方法:

现在,在我的谷歌测试中,我想验证这个输出是否已经完成。下面我的伪代码中使用的lastConsoleOutput等效项是什么?

感谢您的任何反馈!

0 投票
2 回答
4447 浏览

c++ - 使用带有 boost::bind 的 Google Mock

我有一个类,其构造函数采用 Boost 函数,我想用 Google Mock 对其进行测试。以下代码显示了一个示例类以及我对其进行测试的尝试:

MyClass.h:

MyClassTest.cpp:

尝试在 Visual Studio 2008 中编译 MyClassTest.cpp 会出现以下错误:

...gmock/gmock-generated-function-mockers.h(76):错误 C2248:“testing::internal::FunctionMockerBase::FunctionMockerBase”:无法访问在类“testing::internal::FunctionMockerBase”中声明的私有成员1> with 1> [ 1>
F=void (void) 1> ] 1>
.../gmock-spec-builders.h(1656) : 见 'testing::internal::FunctionMockerBase::FunctionMockerBase' 的声明 1 > with 1> [ 1>
F=void (void) 1> ] 1>
这个诊断发生在编译器生成的函数'testing::internal::FunctionMocker::FunctionMocker(const testing::internal::FunctionMocker &)' 1 > 带 1> [ 1>
函数=void (void) 1> ]

错误源于包含 boost::bind 的行。用 void callback(){} 替换 mocked 方法消除了编译错误(但也消除了 Google Mock 的使用,达不到目的)。在不修改测试类的情况下,我尝试做的事情是否可行?

0 投票
1 回答
3401 浏览

cmake - 在不使用 CTest 的情况下使用 CMake 构建测试

这是我想做的事情:

  • 打字make all将建立我的图书馆和它的文档。
  • 键入make test将构建我的库(如果需要)、gtest,然后是我的测试
  • 如果需要,键入make check运行make test,然后运行可执行文件

现在我只设法让第一个工作。我遇到的问题是 gtest 的条件包含。

Gtest 使用了很好的 CMake,理论上我需要做的就是包含 gtest 目录,add_subdirectory但之后总是会构建 gtest。

我现在的结构是:

我试图弄清楚如何将 gtest 作为依赖项添加到test-target 但不是每次都构建 gtest。

我真的很生气,关于学习 CMake 的信息很少甚至没有,所以如果有人知道任何深入的教程(可在互联网上免费获得),那就太棒了。

0 投票
1 回答
723 浏览

c++ - 使用在 Google Test 下测试的现有 C++ 代码并添加 Qt

我正在使用 Linux (Ubuntu) 中的一些 c++0x 功能编写一个用 C++ 编写的程序。我在 Google Test 中写了一堆测试。我正在使用 g++ 和生成依赖项的普通 makefile。

现在我想在一个完全独立的 UI 上工作。

我已经决定 Qt 会很好,但发现它的构建有点复杂。我看到最简单的方法是使用 qmake。

我想知道如何将 Qt 构建到我的应用程序中,同时保持所有底层类独立于 Qt。我了解如何通过编写好的代码来做到这一点,但我想要一个好的构建系统

我不想切换到使用 Qt 的单元测试框架,因为我只想将 Qt 用于 UI,而且我看不到重写测试的意义。

我应该使用 qmake 并对其进行修改以生成我的谷歌测试运行器以及 Qt 应用程序吗?我是否应该保留我的 makefile 并使用 qmake 仅构建和链接代码的 UI 部分,这将取决于原始 makefile 中生成的 .o 文件?我应该做点别的吗?

最后,我将如何执行上述任何选项?

0 投票
1 回答
366 浏览

c++ - 在派生类上应用超类测试

假设您有一个B派生自 class 的 C++ 类A。您为 class 设置了广泛的测试A,您还希望在 class 的实例上运行B,因为它应该完全支持A的功能。当然,您还有其他B特定测试。

你将如何设置测试,这样你就不必复制所有A的测试B

谷歌测试的具体答案会很棒。

0 投票
1 回答
202 浏览

googletest - 在 Google Test 中编译测试子集

使用标志来限制在Google Test 框架中运行的测试很棒,但在我的情况下,大部分时间都浪费在等待整个测试项目在我编写测试时一次又一次地编译上。

有没有一种简单的方法可以将编译限制为我目前正在处理的那些测试用例?

(从 VS 中删除测试 cpp 文件和资源 cpp 文件始终是一种替代方法,但工作量很大......)