0

我想通过包含指向作为私有成员的指针来为A依赖于另一个类(例如)的功能的类(例如)实现几个测试。BB

这是我拥有的代码结构的一个最小且非常简化的示例:待测类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
    }
}

在现实中AB要复杂得多,由单独的声明和定义文件组成,并且都继承自它们相应的接口(因此有以下文件IA.h, A.h,A.cppIB.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 框架进行测试,因此特别欢迎使用这个特定库的解决方案。但我当然也对其他可能的解决方案持开放态度。先感谢您!

4

0 回答 0