单元测试中的C++和依赖注入

lhu*_*ous 5 c++ unit-testing dependency-injection

假设我有一个像这样的C++类:

class A
{
    public:
        A()
        {

        }

        void SetNewB( const B& _b ) { m_B = _b; }

    private:
        B m_B;
}
Run Code Online (Sandbox Code Playgroud)

为了对这样的事情进行单元测试,我必须打破A对B的依赖.由于A类保持实际对象而不是指针,我将不得不重构此代码以获取指针.另外,我需要为B创建一个父接口类,这样我可以在测试SetNewB时传入我自己的假B.

在这种情况下,不依赖注入的单元测试是否会进一步使现有代码复杂化?如果我将B作为指针,我现在正在引入堆分配,现在有一段代码负责清理它(除非我使用ref计数指针).另外,如果B是一个相当简单的类,只有几个成员变量和函数,为什么要为它引入一个全新的接口,而不是仅使用B的实例进行测试?

我想你可以证明通过使用接口重构A会更容易.但是有些情况下两个类可能需要紧密耦合吗?

mik*_*ked 9

我认为你过分了解单位测试的想法.在这种情况下,A和B是一个单位,即A不能没有B.首先,测试B并确保它通过所有B特定的单元测试,然后一旦通过,测试A并确保它表现得如何.