我看到该功能的文档似乎非常重要,因为它在Google测试概述功能中并详细介绍:https:
//github.com/google/googletest/blob/master/googletest/docs/advanced.md#death-tests
它们看起来像标准,assert()
但它们是Google Test的一部分,因此是一个xUnit测试框架.因此,我想知道使用这些死亡测试的真正用途或优点是什么.
gtest的msvc目录包含gtest项目文件,使用Visual Studio打开它使我能够使用Batch Build选择8种配置(gtest/gtest_main/gtest_prod_test/gtest_unittest x release/debug)中的构建.
我怎么能用msbuild工具做同样的事情?例如,如何告诉msbuild构建gtest/Debug或gtest_unittest/Release?
我对 gtest/gmock 进行了很多研究,但没有一个给我正确的答案。我是 C++ 新手,所以任何帮助都将不胜感激。
我使用GoogleMock/GoogleTest进行测试,当匹配器将模拟器的shared_ptr作为参数时,我会看到一些奇怪的行为,并且在同一个shared_ptr上调用EXPECT.令人讨厌的代码:
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
using namespace boost;
using namespace testing;
struct MyParameter
{
virtual ~MyParameter() {}
virtual void myMethod() = 0;
};
struct MyParameterMock : public MyParameter
{
MOCK_METHOD0(myMethod, void());
};
struct MyClass
{
virtual ~MyClass() {}
virtual void myMethod(shared_ptr<MyParameter> p) {}
};
struct MyClassMock : public MyClass
{
MOCK_METHOD1(myMethod, void(shared_ptr<MyParameter>));
};
TEST(LeakTest, GoogleMockLeaksMatchedPointer)
{
shared_ptr<MyClassMock> c = make_shared<MyClassMock>();
shared_ptr<MyParameterMock> p = make_shared<MyParameterMock>();
{
InSequence dummy;
EXPECT_CALL(*c, myMethod(Eq(p)));
EXPECT_CALL(*p, myMethod());
}
c->myMethod(p);
p->myMethod();
}
Run Code Online (Sandbox Code Playgroud)
当这个测试运行时,我明白了 …
Google的C++ Test Framework有两个输出库:一个是gtest.lib,另一个是gtest_main.lib.根据Nik Reiman关于如何使用Visual Studio设置gtest 的答案,我们应该链接到gtest_main.lib但是我链接到gtest.lib并且我运行的示例测试用例运行正常.
两个库之间有什么区别,我链接到哪一个是否重要?
我想测试一些失败的情况下,使用谷歌模拟不会在模拟对象上调用任何方法.所以代码是这样的:
auto mocObj = new MockObj;
EXPECT_NO_METHOD_CALL(mocObj); //this is what I'm locking for
auto mainObj = new MainObj(mocObj , ......and other mocks); // here I simulate a fail using the other mock objects, and I want to be sure the no methods are called on the mockObj
Run Code Online (Sandbox Code Playgroud) 似乎是一个很棒的C++单元测试框架.我只是想要比运行测试的控制台输出更复杂的东西,这也使得运行特定测试变得非常容易(因为gtest支持各种测试过滤)
如果什么都没有,我可能会自己动手
我有一个非常简单的C++库(一个头文件,一个.cpp文件).我想使用Google C++测试框架为这个项目编写单元测试.
这是目录结构:
~/project1
|
|-- project1.cpp
|-- project1.h
|-- project1_unittests.cpp
\-- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
我不打算编写自己的main()函数.我想与引物中提到的gtest_main链接.CMakeLists.txt应该包含什么?
我知道如何分别开发类型参数化测试和值参数化测试.我想弄清楚的是,是否可以将两者结合起来.换句话说,创建一个通用测试,该测试采用该类型的任何类型和范围的值.
googletest ×10
c++ ×7
googlemock ×3
unit-testing ×2
boost ×1
cmake ×1
linker ×1
msbuild ×1
shared-ptr ×1
testing ×1