问题标签 [hippomocks]
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.
winapi - HippoMocks - 如何模拟 Win32 API 函数
HippoMocks 文档说它可以模拟 C 函数,包括 Windows API 函数,但我找不到任何示例。任何人都可以举一个Windows API函数模拟的例子吗?
c++ - HippoMocks - 使用 std::vector 模拟方法无法编译
在尝试 HippoMocks(Cygwin、GCC 4.5.3、CppUnit)模拟接口时,其中一种方法导致编译失败。进一步的分类表明,只有以 std::vector 作为参数的模拟方法才会失败。
例如
在哪里
编译器错误:
c++ - HippoMocks 坚持要销毁 mock
如何防止 m_EmpSvcMock 在内部被 HippoMock 破坏?将模拟传递给 shared_ptr 时,两者都会破坏模拟。
编辑 - 答案:
c++ - HippoMocks 通过 ref 模拟返回值
我如何模拟它,以便它通过参数而不是 int (这是方法的返回类型)返回一个 std::vector ?
另外,如果有超过 1 个 ref 参数怎么办?
c++ - HippoMocks - 模拟一个返回 unique_ptr 的函数
我目前没有成功模拟返回 unique_ptr 的接口。例如,给定
这无法编译,因为Return
实现复制了 unique_ptr
并且期望尝试返回 unique_ptr
我已经尝试过Do
,正如针对返回引用的类似问题所建议的那样。
我也尝试过编写自己的ValueWrapper<T>
生成 unique_ptr 的方法,但值总是在某处被复制。现在我已经没有想法了。
c++ - 可以在 Hippo Mocks 中将 mock 用于具有不同返回值的多个预期调用吗?
我使用 Hippo Mocks 取得了巨大的成功,但我有一种情况,我不太清楚如何正确设置。被测代码看起来像这样:
WhereIRecord::at()
返回 a IColumn&
,它有一个纯虚getValue()
方法。我正在尝试使用和的模拟版本测试我的Irecord
代码IColumn
:
我可以很好地设定期望firstName
:
但我想将IColumn
模拟重用于下一个期望lastName
。
getValue()
但是当我运行它时,Hippo Mocks 会为这两个调用返回“John” 。
按照教程,我尝试限制“firstName”和“lastName”调用的顺序:
getValue()
但是两个电话我仍然得到“约翰” 。
问:是否可以重用IColumn
接口并告诉 Hippo Mocks 在每次调用时返回不同的值,getValue()
就像我需要的那样,或者我是否坚持IColumn
为每个参数创建单独的模拟?注意:我的实际实现将有两个以上的参数,因此重用IColumn
模拟减少了每个单元测试的大量设置。
c++ - HippoMocks - 在 C++ 中模拟 COM 接口?
最新版本的 Hippo Mocks(在其 Git 存储库中)似乎增加了对 COM 接口的支持。我试过模拟一个 ADO 连接对象;这需要对 Hippo Mocks 进行一些调整才能正确构建(似乎 COM 版本的代码没有针对 Hippo Mocks 其余部分的更改进行更新)。我现在正在构建它,但以下测试失败:
智能指针做的第一件事就是AddRef
接口。我的模拟不应该关心引用计数,所以我添加了一个简单地返回的调用期望1
。但是,一旦AddRef
被调用,HippoMocks::NotImplementedException
就会抛出 a。
有没有人成功地用 Hippo Mocks 模拟 COM 接口?
c++ - Hippomocks:如何只期望传递给 ExpectCall() 的一些参数?
在模拟框架Hippomocks中,可以在期望范围内检查传递的参数。例如:
是否有可能只检查一些传递的参数?我应该写什么而不是???在下面的代码中?
供您参考:用例是 someObjet_p 在内部创建一个缓冲区以读取其中的数据并将其传递给 Class::Method。首先,我不关心 someObject_p 希望将数据放入哪个缓冲区。其次,我无法访问 someObject_p 的内部以将其传递给 With() - 这是非常合理的。
注意:当我使用 ExpectCall 时,我已将问题标记为 C++,但我想这同样适用于平面函数的 ExpectCallFunc。
第二个注意事项:Hippomocks 提供了名为“Match()”、“getArgs()”、“assignArgs()”和“matchesArgs()”的预期方法,但我没有找到任何关于它的文档,也不知道它们是否打算是否使用(对于我的用例)。
c++ - 在 Hippomocks 中模拟基类方法
假设我们有以下类A
和B
:
在我们的单元测试中,我们只想测试B
,即使用Hippomocks进行测试,调用B::Init()
实际上会调用DoSomethingSpecial()
:
现在我们不想期待所有来自A
's 的调用,Init()
所以我们想编写如下内容:
最后一个期望会导致一个未处理的异常,我认为这是可以的,因为我们正在将我们正在调用的方法与我们想要期望的基本版本混合在一起。投射b_p
到 anA
没有帮助。
该特定用例有什么解决方案吗?
mocking - HippoMocks - 如何模拟用户定义的结构,特别是 WinAPI 结构
我处于必须模拟 WinAPI 调用的情况,并且遇到了一些困难,我能够让 C 函数模拟在 HippoMocks 中工作。
1) 我发现 Assembla 上的 HippoMocks 存储库没有 C 函数模拟。我能够在 github 的存储库中找到它。
2) 我无法模拟具有用户定义的输出参数的函数。例如,我尝试了一个简单的 WinAPI 函数—— GetSystemTime,它不返回任何内容。相反,它采用 LPSYSTEMTIME 类型的输出参数。当我尝试模拟此函数时,我看到以下类型的错误:
问题似乎是模拟框架抱怨 SYSTEMTIME 类型的对象没有赋值运算符这一事实。如何解决这个问题?
注 1:我成功地能够使用简单的参数/返回值模拟 WinAPI 函数。