gpt4 book ai didi

c++ - 使用googlemock模拟正在测试的函数的内部调用

转载 作者:行者123 更新时间:2023-11-30 04:23:37 24 4
gpt4 key购买 nike

我是 Google Mock 的新手,根据我对文档和在线资源的理解,我无法确定我的问题的解决方案:

我有以下类(class):

class A
{
public:
A() { }
int fun1()
{
//Some code
B b;
x = b.fun2();
//Some other code
}
};
class B
{
public:
B() { }
int fun2()
{
//Some code
y = C::fun3();
//Some code
}
};
class C
{
public:
static int fun3()
{
//Read a file and provide success if a certain pattern is found
}
};

现在我正在尝试为 A::fun1() 编写 Google 测试。但是由于代码的结构(所有调用都是通过对象进行的,而且我没有可以用来初始化模拟等的基类,所以我无法成功模拟它。

有人可以帮我理解这是否可以用当前形式的 Google Mock 模拟吗?请注意,我不允许更改原始源代码。

最佳答案

只要被测类可以使用静态接口(interface)(即模板参数)进行配置,您就可以这样做。有关详细信息,请参见此处:Mocking Nonvirtual Methods .

另一种选择可能是在被测类中引入包装器接口(interface),可以像往常一样模拟:Alternative to Mocking Concrete Classes .

如果您不能更改任何代码,恕我直言,这是不可能的。

更新:只要 class BA::fun1() 中被实例化,就很难模拟 B。它应该作为参数传递,因此您有机会控制测试方法中的实例化。

可能是一个可行的解决方案,您可以欺骗构建环境以进行测试,并为提供模拟的 class B 提供声明和定义。

关于c++ - 使用googlemock模拟正在测试的函数的内部调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273924/

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