作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道使用 HippoMock 是否可以只模拟类的一部分。
例子
class aClass
{
public:
virtual void method1() = 0;
void method2(){
do
doSomething; // not a functon
method1();
while(condition);
};
};
我只想模拟方法 1 以测试方法 2
很明显我使用了 HippoMock 并且我在 method2 中有一个错误所以我做了一个单元测试来纠正它并确保它不会回来。但是我找不到方法。
我试试这个
TEST(testMethod2)
{
MockRepository mock;
aClass *obj = mock.Mock<aClass>();
mock.ExpectCall(obj , CPXDetector::method1);
obj->method2();
}
原生 cpp 有什么解决方案吗?使用其他模拟框架?
非常感谢
安布罗斯·佩蒂热内
最佳答案
这个答案有两个部分。首先,是的,这很容易做到。其次,如果您需要以这种方式构建测试,您通常会遇到不幸的类设计 - 当您需要对遗留软件进行测试时,通常会发生这种情况,而类设计无法合理修复。
如何测试这个?据我所知,您可以为此使用 Hippomocks,但因为我已经有一段时间没有使用它了,所以我不记得如何去做。因为您要求任何解决方案,即使是那些使用不同框架的解决方案,我建议使用直接方法而不是使用 hippomocks:
class bClass : public aClass
{
int _counter;
public:
bClass() : aClass(), _counter(0){}
void method1() { _counter++; }
int NumCallsToMethod1() const { return _counter; }
};
TEST(testMethod2)
{
bClass testThis;
testThis.method2();
TEST_EQUALS(1,testThis.NumCallsToMethod1());
}
或者,如果 method1
是 const
:
class bClass : public aClass
{
mutable int _counter;
public:
bClass() : aClass(), _counter(0){}
void method1() const { _counter++; }
int NumCallsToMethod1() const { return _counter; }
};
关于c++ - 河马模拟 : mocking just a part of class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999271/
我正在寻找一种解决方案来管理我在网站和内部网之间的内容,并且正在结合使用 Hippo CMS 和 Jetspeed。看起来不错,巴士有人对这种组合有任何经验吗?您从哪里购买更多 portlet? 最佳
我是一名优秀的程序员,十分优秀!