我想通过包含指向作为私有成员的指针来为A
依赖于另一个类(例如)的功能的类(例如)实现几个测试。B
B
这是我拥有的代码结构的一个最小且非常简化的示例:待测类A
// A.cpp
#include "IB.h"
class A
{
public:
A() {
objectB = B::Instance();
}
void funcA1() {
// Calls B->funcB1() ...
}
void funcA2() {
// Calls B->funcB2() ...
}
private:
B* mObjectB;
}
它使用类的功能B
// B.cpp
class B
{
public:
static B* Instance() {
// Returns instance of B
}
void funcB1() {
// Some complicated functionality
}
void funcB2() {
// Some complicated functionality
}
}
在现实中A
和B
要复杂得多,由单独的声明和定义文件组成,并且都继承自它们相应的接口(因此有以下文件IA.h
, A.h
,A.cpp
和IB.h
, B.h
, B.cpp
)。
在我的测试环境中,我想从 替换复杂的东西B
,我创建了它的模拟,BMock
它实现了具有相同名称但以非常简单的方式的函数:
// BMock.cpp
class BMock : public B
{
public:
static BMock* Instance() {
// Returns instance of BMock
}
void funcB1() {
// Simulates complicated functionality of B::funcB1 with some simple functionality
}
void funcB2() {
// Simulates complicated functionality of B::funcB2 with some simple functionality
}
}
在主测试文件中,我A
通过调用类的方法来测试类的实例:
// MainTestFile.cpp
#include "A.h"
A objectA = A();
objectA.funcA1();
objectA.funcA2();
所以我不太确定如何解决的主要问题是,在调用objectA.funcA1()
时MainTestFile.cpp
,它将使用原始类中的功能B
(因为它包含相应接口的标题)。
但是,我的目标是以某种方式用B
来自BMock
.
我使用 Boost.Test 框架进行测试,因此特别欢迎使用这个特定库的解决方案。但我当然也对其他可能的解决方案持开放态度。先感谢您!