- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 HippoMock 模拟接口(interface),以便在使用所述接口(interface)的类中使用。我构建了一个模拟对象并设置了 ExceptCallOverload,一切都可以正常编译。然而,我正在测试的类调用了模拟对象,它调用了 mock::NotImplemented 函数。
此外,我正在模拟的例程接受对接口(interface)的引用,但在 a 中传递的对象存储在 shared_ptr 中。如果我 wall .With 并传递 shared_ptr 对象,我得到一个错误报告 comparer::compare can't match template parameters,这是可以理解的。因此,如果我只是传递对接口(interface)的引用,我会得到一个错误,不能实例化纯虚拟类。
我觉得这让我在使用 HippoMark 时进退两难。
一个小例子:
class objectA_interface
{
public:
virtual double getDouble() = 0;
};
class objectB_interface
{
public:
virtual double getDouble() = 0;
};
class test_interface
{
public:
virtual void fun(objectA_interface&) = 0;
virtual void fun(objectB_interface&) = 0;
};
void do_something()
{
std::shared_ptr<objectA_interface> objectA;
std::shared_ptr<objectB_interface> objectB;
MockRepository mocks;
test_interface* mock_interface = mocks.Mock<test_interface>();
//error C2259: 'object_interface' : cannot instantiate abstract class
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectA_interface&))&test_interface::fun).With(*objectA);
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectB_interface&))&test_interface::fun).With(*objectB);
//error C2665: 'HippoMocks::comparer<A>::compare' : none of the 2 overloads could convert all the argument types
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectA_interface&))&test_interface::fun).With(objectA);
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectB_interface&))&test_interface::fun).With(objectB);
}
最佳答案
您不能将 shared_ptr 作为平面引用传递给任何函数。这解释了为什么第二次调用不起作用 - shared_ptr 不是引用。
第一个调用应该有效,但看起来 .With 正在尝试制作对象的拷贝而不是使用引用。您可以使用 Hippomocks::byRef 来明确指示它应该使用 this 作为引用而不是可复制的实例,以便它将使用您的实例。这样做会隐式地导致在实际调用发生之前超出范围的临时对象可能崩溃。
根据 test_ref_args.cpp 中的测试代码,您的具体情况:
class IRefArg {
public:
virtual void test() = 0;
};
MockRepository mocks;
IK *iamock = mocks.Mock<IK>();
IRefArg *refArg = mocks.Mock<IRefArg>();
mocks.ExpectCall(iamock, IK::l).With(byRef(*refArg));
iamock->l(*refArg);
关于c++ - HippoMock 总是抛出 NotImplemented,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576135/
假设我们有一个单元测试,它首先执行我们期望函数 someFunc 不会被调用的代码序列,然后执行我们期望该函数被调用的代码序列恰好一次。使用HippoMocks ,我们可以这样写: #include
我已经开始使用 HippoMocks 编写单元测试。我想知道是否可以模拟非虚类方法? 初看代码似乎表明该框架仅支持虚拟方法。但由于它支持模拟简单的 C 函数,因此应该可以对非虚拟类方法执行相同的操作。
Hippomocks具有用于模拟重载函数调用的 OnCallFuncOverload 宏。我正在尝试使用具有可变 args 计数的模拟函数。任何人都可以给出一个带有可变参数计数的重载函数的例子吗? 我
我正在研究使用 mocking 进行单元测试,我将添加到现有代码中。为此,我使用 HippoMocks .这涉及另一个类在我的模拟上调用一些方法(都是虚拟的)。我想避免过度指定所有这些,但是每当其他类
我正在使用 Hippomocks 并且有一个实现通用接口(interface)的类。当我对此类寄予期望时,我没有得到预期的行为。 这是我的最小“工作”示例 template struct Foo {
我正在尝试使用 HippoMock 模拟接口(interface),以便在使用所述接口(interface)的类中使用。我构建了一个模拟对象并设置了 ExceptCallOverload,一切都可以正
我想知道 hippomocks 做了什么来拦截 exit 调用函数,例如下面的代码所示: MockRepository mocks; mocks.ExpectCallFunc(exit).
IEmployeeServiceProxy* empSvcMock = m_Mocks.InterfaceMock(); m_EmpSvcMock.reset(empSvcMock); // shar
class IEmployeeServiceProxy { public: virtual ~IEmployeeServiceProxy() { } virtual void AddE
在模拟框架中 Hippomocks可以在期望中检查传递的参数。例如: void Class::Method(int arg1); ... m_mockRepository_p->ExpectCall(
我想隔离 writeMemory 但我不能,因为出现以下错误: ../../Util/UnitTest++/../../UnitTests/KeeperDive_Test.h:66:57: error
我目前无法成功模拟返回 unique_ptr 的接口(interface)。例如,给定 struct IFoo { virtual std::unique_ptr foo = 0; }
HippoMocks 文档说它可以模拟 C 函数,包括 Windows API 函数,但我找不到它的任何示例。任何人都可以举一个 Windows API 函数模拟的例子吗? http://www.hi
在尝试使用 HippoMocks(Cygwin、GCC 4.5.3、CppUnit)模拟接口(interface)时,其中一种方法导致编译失败。进一步的分类表明,只有以 std::vector 作为参
在尝试使用 Hippomock 的 MockRepository::ExpectCall 注册期望时,我在 MockRepository::BasicRegisterExpect 的下一行遇到了 No
The latest version of Hippo Mocks (在其 Git 存储库中)看起来已经添加了对 COM 接口(interface)的支持。我试过模拟一个 ADO 连接对象;这需要对
我是一名优秀的程序员,十分优秀!