C 的单元测试 - 如何在不重新编译/重新链接的情况下测试'unit'?
unit-test for c - how to test a 'unit' without recompiling/relinking?
我是单元测试的新手,但不是C(在嵌入式环境中)-我有一个概念问题,我确信有一个简单的答案…我只是想不出那个答案。
我已经开始尝试单元测试,在阅读了几本关于这个主题的书之后——书中的例子总是看起来很清楚,但是琐碎,但是没有真正触及到我所缺失的部分(或者如果有,它超出了我的头脑)。
我已经开始在我们的一个协议栈上进行单元测试,该协议栈有四层(应用程序,演示,会话,传输)。为了保持示例的简单性,每个层可能有一到几个函数。如果我想对应用程序层进行单元测试,我想我应该明白,为了隔离应用程序层,我应该将接口"存根"到表示层(或者为表示层创建一个模拟?)。我已经试过了,一切似乎都很好。
然而,我的问题是,如何在不重新编译或重新链接目标的情况下对表示层进行单元测试,从而生成一堆可执行文件?
我不确定c++,但在C的情况下,一个建议的方法是进行条件编译。这样您就可以将其编译为实际项目或单元测试。所以在单元测试中,存根会被执行。
但是因为你不想重新编译它,有一个非常粗鲁的方法,那就是有两个部分的函数依赖于一个标志。因此,在运行时,如果您更改标志值,则执行第二部分,因此在这种情况下,您的实际函数可以充当存根。
免责声明,我在Typemock工作。
你可以使用Typemock isolator++来模拟任何你在c++中需要的东西。隔离器在运行时工作,因此您不需要重新编译或更改生产代码,请参见示例:
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);
}
你还可以模拟具体类,静态和全局函数…
相关文章:
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 如何在不闪烁的情况下运行ESP32的单元测试
- 谷歌嘲笑!我的测试出错.默认情况下,呼叫将返回调用
- 在单元测试中测试连接丢失(在节俭的C++应用程序中或一般情况下)
- SuiteParse CHOLMOD在通过所有演示测试的情况下抛出gpu_memorysize错误
- C++ - 在没有物理设备的情况下测试串行端口
- Qt在没有x服务器的情况下测试控制台应用程序
- 任何地方都可以测试arduino在没有硬件的情况下能做什么
- 在没有朋友的情况下测试C++中的私有类成员
- 在没有测试用例的情况下提升单元测试框架
- 在不更改代码的情况下使用 .in 文件进行测试
- C++ - 如何在没有dynamic_cast<>的情况下测试工厂
- 如何在没有main的情况下初始化谷歌测试
- 在谷歌测试中,如何在断言失败的情况下进行拆卸
- 在没有硬件的情况下测试此功能的简单/创造性方法
- 是否可以在没有完全定义着色器的情况下测试缓冲区数据是否成功加载到GPU上?(C++、OpenGL 4.4、GLFW)
- 是否可以在不使用文件函数的情况下使用代码块从文件运行某些用例测试?
- C 的单元测试 - 如何在不重新编译/重新链接的情况下测试'unit'?
- 在这种情况下如何测试左值或右值