已经安装了GoogleTest之后,如何在Visual Studio 2017中配置GoogleMock?
我将Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn软件包安装到我的VS 2017应用程序解决方案中.这是通过通过"添加新项目/其他语言/C ++/test/Google Test"将新的Googletest项目添加到我的解决方案中完成的. 测试效果很好,但是现在我准备尝试与Gmock进行一些模拟.因此,我通过Nuget安装了GoogleMock.v140.windesktop.static.rt-dyn,但我不知道如何将其集成到我的测试项目中. 我的packages.config看起来像这样:
0 2023-11-24
编程技术问答社区
Visual Studio 2010中的GoogleMock和GoogleTest
是否有人成功地在Visual Studio 2010中成功建造了Gmock和Gtest?我已经尝试使用1.5.0版,但是我只会遇到难以理解的编译错误. 解决方案 I found this 线程在Google组中,有关在VS2010下构建Gmock-1.5.0时发现的问题.之后,我创建了一个对我有用的简短读数文件,因此是: 从 Google Mock . . 提取到机器上的库文件夹(例如C:\ libs \ gmock-1.5.0).从现在开始,此文件夹将被称为" gmock_root'. 打开VS2010,并加载解决方案:gmock_root \ msvc \ gmock.sln.让VS从VS2008转换为VS2010. 很重要!不要双击gmock_root \ msvc下的解决方案文件.这会导致不良转换. 按照 在项目gmock->私人标头文件中 - > gmock-internal-utils.h: 行201,202:评论"助手"功能: char
0 2023-11-23
编程技术问答社区
如何在Visual Studio中使用GoogleMock?
这将是一个自我解答,常见问题 - 型问题.请参阅下面的答案. 使用Visual Studio 2017/2019,设置新的 Google测试项目并开始写作测试(只要您不介意使用Googletest版本的较旧版本). 但是也使用GoogleMock呢?您可能会认为,由于Google不久前将GTEST/GMOCK组合在一起,这将起作用.只是#include "gmock/gmock.h"并模拟.但是,不,尝试添加第二个GoogleMock Nuget软件包会导致多个问题,例如不匹配的GTEST/GMOCK版本,重叠包括路径等. 用MSVCRTD.lib(exe_main.obj) : error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 那么,在Visual Studio中设
6 2023-11-20
编程技术问答社区
嘲笑一种验证GoogleMock中计时器功能的方法
我有一个功能,可以在引擎盖下设置一个计时器,我想在不使用单位测试中使用任何延迟的Gmock测试. 我可以使用EXPECT_CALL来确定TimerWrapper是freq及时调用的,但是如何在不使用显式延迟的情况下验证每个运行的间隔? // Wrapper around CreateTimer utility void TimerWrapper(int freq, int interval, std::function callback) { // run callback freq times spaced out at interval CreateTimer(freq, interval, callback); } TEST_F(TestTimer) { // verify TimerWrapper runs X times every interval // so if interval = 1s, freq = 5, there s
4 2023-11-07
编程技术问答社区
在Googletest中,我无法模拟系统功能。
我试图模拟系统有趣的IOCTL和套接字,但它总是在调用系统功能的原始定义.这是我使用gmock编写的gtest代码. 请浏览代码,并帮助我找到问题所在. 是否有一种方法可以在单元测试中使用GMOCK模拟系统功能.如果有的话,请为我提供一个模拟系统函数的示例代码. 在test.hpp文件中 class SystemFun { public: virtual ~SystemFun() {} virtual int ioctl(int inetSocket, int counters, struct ifreq *device) = 0; virtual int socket(int domain, int type, int protocol) = 0; }; class SystemFunMock : public SystemFun { private: static SystemFunM
6 2023-11-07
编程技术问答社区
如何模拟返回对象
我尝试模拟用户类及其嵌套的结构用户构造器: class User { public: virtual int loadData(const std::string& filename); virtual UserBuilder getUserBuilder(const std::string& functionName) const; struct UserBuilder { UserBuilder(std::string functionName) : m_functionName{functionName} {}; virtual ~UserBuilder(); virtual UserBuilder& fun1(); virtual UserBuilder& fun2(int32_t num); virtual bool call
2 2023-11-07
编程技术问答社区
GMock将一个模拟对象传递到另一个对象中,并调用一个存根方法,仍然是在调用真实的逻辑。
我试图将模拟的对象传递到另一个对象的方法并调用它,我得到的结果与我称之为真实方法相同. fooa.h-这是真实类 #ifndef FOOA_H #define FOOA_H class FooA { public: FooA(); virtual int method(int a, int b, int c, int d); }; #endif // FOOA_H fooa.cpp #include "fooa.h" FooA::FooA() { } int FooA::method(int a, int b, int c, int d) { return a+b+c+d; } MockedFooa.h- fooa的模拟版本 #ifndef MOCKEDFOOA_H #define MOCKEDFOOA_H #include "fooa.h" #include class MockedFooA : p
2 2023-11-07
编程技术问答社区
如何(谷歌)模拟DBUS接口?
说我有一个具有以下代码的课程 void MessageBuilder::Init(DBusMessage* pMsg) { if (NULL != m_pMsg) { ::dbus_message_unref(m_pMsg); } // m_pMsg is a private data member m_pMsg = pMsg; ::dbus_message_iter_init_append(m_pMsg, &m_objArgs); } dbus呼叫在一个名称空间中,因此::(我相信).谁能建议如何模拟/暂停:: dbus_*呼叫? 解决方案 使用GoogleMock,您可以假装类的虚拟方法.但是:: dbus_*函数不是任何类的成员(您是对的,它们处于名称空间:全局名称空间).因此您不能使用GoogleMock(直接). James W. Grenning 嵌入式C 的测试驱动开发提出了一些解决方案
4 2023-11-07
编程技术问答社区
gmock/google-mock发出警告,并在测试中出现嘲弄异常而失败。
我使用Google模拟编码了一个演示模拟.问题是它正在失败且无法正确嘲笑.我在这里不明白这个问题. 代码: test/mock_turtle_test.cc #include "mock_turtle.h" #include "../painter.h" #include using ::testing::_; using ::testing::AtLeast; using ::testing::Return; ACTION(MyException) { throw(error_k()); } TEST(PainterTest, CanDrawSomething) { Painter painter; EXPECT_CALL(*(painter.getTurtle()), PenDown()) .Times(AtLeast(1)) .WillOnce(MyException())
0 2023-11-07
编程技术问答社区
使用GMock的命名空间来模拟方法
我正在使用c ++中的gmock/gtest编写单元测试.我无法在名称空间中模拟方法.例如:namespace::method_name()在调用函数中. 示例代码: TestClass.cc. // Unit test class TEST(testFixture, testMethod) { MockClass mock; EXPECT_CALL(mock, func1(_)); mock.helloWorld(); } MockClass.cc // Mock class class MockClass{ MOCK_METHOD1(func1, bool(string)); } HelloWorld.cc // Main class void helloWorld() { string str; if (corona::func1(str)) { -> function to be mocked // Actio
2 2023-11-07
编程技术问答社区
如何使用gmock来模拟具体类中的非虚拟方法?
i以某种方式从coinflipper/ ├── BUILD ├── WORKSPACE ├── coinflipper.cc ├── coinflipper.h ├── rng.cc └── rng.h 好吧,将Rng类放在CoinFlipper构造器的参数中,我将其在CoinFlipper::flipCoin()方法中进行了初始化. 我想知道如何在这种情况下从Rng嘲笑generate()? coinflipper.cc #include "coinflipper.h" #include CoinFlipper::CoinFlipper() {} CoinFlipper::Result CoinFlipper::flipCoin() const { Rng d_rng; const double val = d_rng.generate(0.0, 1.0); return (val
2 2023-11-07
编程技术问答社区
依赖注入和与GoogleMock嘲笑的实际例子
我正在寻找一个简单的完整切割和粘贴示例,用于使用GoogleMock进行依赖注入和嘲笑.我发现了有关代码片段的一些理论讨论,这些讨论解释了它的工作原理,但无法找到一个完整的运行示例来剪切和粘贴和尝试.有东西可用吗? 解决方案 要了解它如何与GoogleMock一起使用,我做了这个完整的示例,我想与其他初学者分享该主题.根据其他问答理论背景.我在Debian Bullseye系统上运行它. 虚构库中有一个类Mylib,方法只是返回123.在测试中,它被模拟返回456.真实类和模拟类都是从接口类继承的.这样可以确保由注射器(TEST(..){..}宏)注入应用程序Myapp的不同对象具有相同的方法调用.这是一个示例: ~$ cat test_myapp.cpp #include "gtest/gtest.h" #include "gmock/gmock.h" #include class MylibInterface { public: v
12 2023-11-07
编程技术问答社区
如何在google测试中使用mocking框架来测试延迟后的调用?
我目前正在尝试评估不同的测试框架.当使用模拟框架时(我倾向于假货,但是Google模拟也很好),我知道您可以在调用函数之前和之后使用OS的计时器调用自己的"性能"测试来验证功能的性能.这不是我追求的. 我所拥有的是在给定某些输入的输出上实现延迟的类.例如: 输入1从低到高 输出1在1.5秒后从低点到高. 我希望能够在指定边界的地方做一些事情: myMock.theInput(); EXPECT_CALL(myMock, theDelayedOutput()) .Times(1) .Before(1.6sec) .After(1.4sec); 为了澄清,不支持Before和After线.这只是我喜欢简单语法的一个例子. 在进行输入调用之间和检查EXPECT_CALL? 之前,是否可以在Windows中实现"延迟"功能 那是一部分 - 我仍然必须启动一个专有计时器.这样的东西? myMock.theInput(); windowSle
0 2023-11-07
编程技术问答社区
使用googlemock与非虚拟函数的虚假impls
我拥有基于GoogleMock框架的一些单元测试的旧代码.当我试图使用一些新方案扩展单位测试时,我遇到了以下问题: class D { public: void pubMethod1(); int pubMethod2(); // There are pretty much non-virtual methods, both public and private ... protected: uint method3(); void method4(); ... // Some class members are here }; class SUT { public: ... protected: D _dep; }; 应测试SUT类(正在测试的软件),其实现是在文件sut.cpp中定义的. SUT取决于D类,其实现在文件d.cpp中.为了减少链接器依赖关系,我不想在测试中添加d.cpp,因此当我链接测试时,针对D的成员有许多"未定义
2 2023-11-07
编程技术问答社区
如何使用gmock来模拟这个类,使其实例成为其他类中的一个成员
我是gmock的新用户. 我不知道如何使用gmock模拟此类的实例,以作为其他类中的类成员. 代码看起来如下: classs B { B_fun(); }; class A { B b; A_fun() { if( b.B_fun() === XXX ) { doXXXXX... } } 现在,我想使用gmock模拟B,然后在A的Unittest中使用mockB. 你能告诉我如何做. 谢谢! 解决方案 您可以按照: 模拟B类 class MockB: public class B { MockMethod0(B_func, void()) }; 然后使用: MockB mockb; 并假设A级A的构建功能之一是: A(B b_)b(b_){} 因此,您可以通过: 使模拟函数可行 A test_a = A(mockb); EXPECT_CALL(...) 其他解决
0 2023-11-07
编程技术问答社区
我正在使用gtest和gmock框架进行单元测试,我需要帮助来存根/嘲弄一个在类函数中使用的外部C函数。
因此,我试图为我的生产代码编写测试用例,但是由于某些外部C库的使用情况,覆盖范围却大大较低,而这些c库无法执行,而没有目标硬件,所以我别无选择,只能固执.现在问题是如何固执c函数? 我的生产代码:prod_code.cpp int TargetTestClass::targetFunc() { if(externalCFunc() == True) { statement1; statement2; statement3; /// and so on } } 我的testcode.cpp通常包含类似的测试 //Fixture for Target Test class class TargetTestClassFixture : public testing::Test { TargetTestClass* targetTestClassPtr; void SetUp() { t
4 2023-11-07
编程技术问答社区
如何使用Gmock创建模拟对象?
因此,我正在尝试学习如何编写单元测试,而我偶然发现了问题,但我不了解如何创建模拟对象.这是我的例子: 我有这个课: class FooChild { public: void doThis(); bool doThat(int n, double x); }; 这是我要测试的另一类方法中的一种方法: #include "FooFighter.h" #include "FooChild.h" void FooFighter::doSomething() { FooChild fooChild; fooChild.doThis(); fooChild.doThat(4, 5); } 我想测试诸如称为该方法的事物以及多少次. Google模拟纪录片说,只能模拟使用虚拟方法的抽象类.这就是为什么我尝试创建一个父母类的foochild,这样的原因: class Foo { public: virtual void doTh
0 2023-11-07
编程技术问答社区
如何使用gtest对std::bind函数进行单元测试?
我试图为我的项目中的某些CPP文件编写Unittest案例. 这里的情况是: 我只有一个只有一个公共方法的CPP文件,然后依次调用私有方法. 在这里,私人方法在公共方法中称为回调方法.我如何在此处测试私人方法.我将进行回调指针的嘲笑,我不确定如何调用私人方法. 请给我一些建议,在此情况下如何调用私人方法而不更改源代码. 这是Ex: buttonListenerList addButtonActionCallback(std::bind(&AudioSource::buttonCallback, this, _1, _2)); 公共方法定义了这种代码的平静.现在AudioSource::buttonCallback是一种私人方法.您如何通过调用公共方法来确保调用此私人方法. 解决方案 如果,(您在评论中回答是)sourceButton可以被模拟 - 然后期待addButtonActionCallback被称为 -
0 2023-11-07
编程技术问答社区
gmock指向基类的指针没有成员gmock_
对不起,如果标题不清楚. 我有一个虚拟基类: class FileSystemInterface { public: virtual ~FileSystemInterface() {}; virtual void save(std::string file_content) = 0; }; 我的模拟类来自以下内容: class MockFile : public FileSystemInterface { public: MOCK_METHOD1(save, void(std::string)); }; 现在,我正在测试一种方法,该方法将独特的指针用于FileSystemInterface: void my_method(std::unique_ptr& interface) 我的测试代码如下: std::unique_ptr mockF
0 2023-11-07
编程技术问答社区
谷歌测试中没有模拟的EXPECT_CALL
是否有任何方法可以通过googletest为C ++测试函数调用而无需创建模拟对象,例如我们有以下生产代码: if (a) method(x); 我想测试在情况a中是否将调用method是true,a是错误的.我想构建一个测试,该测试的执行时间完全相同,但Google Test's Expect_call所做的,但是Expect_call仅适用于模拟对象的方法.就我而言,我希望不使用模拟(无需创建任何对象). 解决方案 作为状态, 可以使用Google Mock模拟免费功能(即C型函数或静态方法).您只需要重写代码即可使用接口(摘要类). 他们的"可能" 是误导性的,因为您必须重写代码以使用类(摘要,或由模板提供),因此不再使用免费功能. 其他解决方案 如果您想伪造免费功能,则可能需要查看假功能框架(FFF).它允许您替换可以以类似于GoogleMock类似方式使用的假实现的伪造功能. 它与googlemock和googletest无缝
0 2023-11-07
编程技术问答社区