![]() |
1
27
在这种情况下,你不需要嘲笑
选项1:要测试的子类因为你已经在一个类中有了你的对象,你可以用子类来测试。例如,假设以下是您的实际类:
然后,为了进行测试,您可以这样子类化:
现在可以使用
选项2:使用连接接缝Working Effectively with Legacy Code .
测试.cpp:
库.cpp:
然后进行测试:
|
![]() |
2
13
查找“依赖注入”的模式。
在实际代码中,调用方传递接口的实现,该接口将接口的虚拟方法“getaddrinfo”映射到real::getaddrinfo函数。
|
![]() |
3
10
3个选项
. 使用gnu链接器的模仿功能
2 . 定义自己的getaddrinfo并将其静态链接到测试应用程序。这只有在libc是动态链接的情况下才有效,这在99%的情况下都是正确的。这种方法也有一个缺点:在单元测试应用程序中永久禁用真正的getaddrinfo,但是实现起来非常简单。
|
![]() |
4
2
你可以使用ELF系统 elf_hook
elf炣hook具有以下签名:
你可以这样使用:
有没有打电话给
一篇综合性的文章由elf_nuHook的作者,Anthony Shoumikhin,是 here |
![]() |
5
1
虽然技术上可行,但我不认为这是可行的。您必须能够替换该函数的实现,而您可能无法并且仍然链接到系统上的标准库。 你应该做的是打电话给中介。然后,您可以在测试期间模拟中介,并将其转发到生产中的实际函数。您甚至可以考虑创建一个类,该类与此函数和其他类似函数交互,并为您的程序提供一个更通用的接口。这个类在大多数时候除了转发调用之外不会做任何事情,但是在测试期间它可以被有效地模仿,并且你可以测试任何使用它的东西。
|
![]() |
6
0
免责声明:我写的是ELFspy。
例子:
如果需要,可以调用原始getaddrinfo,如下所示:
您的代码必须使用-fPIC作为独立于位置的代码进行编译,这样才能正常工作。 关于模拟时间(time_t*)示例中的更多详细信息可在此处找到: https://github.com/mollismerx/elfspy/wiki/Example-03:-Faking-time |
![]() |
Phil Gunning · 使用嵌套函数更改进行模拟测试 3 年前 |
![]() |
Korr · 如何用Jest模拟组件测试中服务的功能 3 年前 |
![]() |
Jordan Lee · 在另一个类中使用实例方法作为装饰器 7 年前 |
![]() |
user2350138 · 为WireMock构建Java项目 7 年前 |
|
user8584384 · 单元测试不起作用,因为导入的文件作为输入 7 年前 |
![]() |
Vino · 如何模拟Python类的对象? 7 年前 |
![]() |
Enrico · .NET核心ASP。带有会话和测试的NET控制器 7 年前 |