我是单元测试的新手,但不是C(在嵌入式环境中) - 我有一个概念性的问题,我肯定有一个简单的答案......我只是难以得到答案。< / p>
我已经开始尝试单元测试了,在阅读了几本关于这个主题的书之后 - 书中的例子看起来总是很清楚,但是很简单,但是并没有真正触及我遗失的那篇(或者如果它确实如此,它超越了我的脑袋。)
我已经开始尝试在我们的一个协议栈上进行单元测试,这些协议栈有四层(app,presentation,session,transport)。为了清楚起见,保持示例简单,每个层可能具有一个到多个功能。如果我想对App层进行单元测试,我想我应该理解我是否“将”接口连接到表示层(或者为表示层创建一个模拟?),以便隔离应用层。我已经尝试过了,看起来一切都很好。
然而,我的问题是,如何在不重新编译或重新链接目标的情况下对表示层进行单元测试,从而生成一堆可执行文件?
感谢您的见解。
答案 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);
}
您也可以以相同的方式模拟具体类,静态和全局函数。