单元测试c - 如何测试一个单元'没有重新编译/重新链接?

时间:2014-08-08 04:29:55

标签: c++ c unit-testing

我是单元测试的新手,但不是C(在嵌入式环境中) - 我有一个概念性的问题,我肯定有一个简单的答案......我只是难以得到答案。< / p>

我已经开始尝试单元测试了,在阅读了几本关于这个主题的书之后 - 书中的例子看起来总是很清楚,但是很简单,但是并没有真正触及我遗失的那篇(或者如果它确实如此,它超越了我的脑袋。)

我已经开始尝试在我们的一个协议栈上进行单元测试,这些协议栈有四层(app,presentation,session,transport)。为了清楚起见,保持示例简单,每个层可能具有一个到多个功能。如果我想对App层进行单元测试,我想我应该理解我是否“将”接口连接到表示层(或者为表示层创建一个模拟?),以便隔离应用层。我已经尝试过了,看起来一切都很好。

然而,我的问题是,如何在不重新编译或重新链接目标的情况下对表示层进行单元测试,从而生成一堆可执行文件?

感谢您的见解。

2 个答案:

答案 0 :(得分:0)

我不确定C ++但是在C的情况下, 建议的方法是进行条件编译。这样您就可以编译为实际项目或单元测试。因此,在单元测试中,存根被执行。

但是因为你不想重新编译它,所以有一个非常粗鲁的方法,那就是你的函数有两个部分依赖于一个标志。因此,在运行时如果更改标志值,则执行第二部分,以便在这种情况下您的实际函数可以充当存根。

答案 1 :(得分:0)

免责声明,我在Typemock工作。

您可以使用Typemock Isolator++模拟c \ c ++中需要的任何内容。 Isolator在运行时工作,因此您无需重新编译或更改生产代码see example

production.dll中的production.cpp

class MyPureClass
{
public:
   virtual int GetResult() = 0;
}
test.dll中的

test.cpp

TEST_METHOD(Method1)
{   
    //mock the class = its methods will return fake objects (recursively) or default values
    MyPureClass* fakeMyClass = FAKE<MyPureClass>(); 

    //assign specific return value to a method
    WHEN_CALLED(fakeMyClass->GetResult()).Return(10);
}

您也可以以相同的方式模拟具体类,静态和全局函数。