gpt4 book ai didi

c++ - 河马模拟 : mocking just a part of class

转载 作者:太空狗 更新时间:2023-10-29 23:04:43 25 4
gpt4 key购买 nike

我想知道使用 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());
}

或者,如果 method1const:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com