gpt4 book ai didi

objective-c - 在 Objective-C 中模拟 C 库函数

转载 作者:太空狗 更新时间:2023-10-30 03:51:10 26 4
gpt4 key购买 nike

我是 Objective-C 的初学者,但我用过一些 jUnit。

为了对我的代码进行单元测试,我需要能够模拟我通过 CFStreamCreatePairWithSocketToHost 函数使用的网络。

根据对 How to mock a C-function using OCMock 的回答,这在 OCMock 中是不可能的。是否有任何框架或技术允许这样做?

我宁愿不 promise 使用一些过于复杂的 Java 式 IoC 框架只是为了让我的代码更容易测试,但我必须说 Spring 的好处之一是当你使用所有东西时很少会出现这样的问题通过接口(interface)并通过依赖注入(inject)配置实现。这是前进的方向,还是有更简单的解决方案?

最佳答案

您可以在内存中重新绑定(bind)系统(所有)函数指针以进行测试。有多种技术可以做到这一点(例如 DYLD_INSERT_LIBRARIES),但最简单的方法是使用来自 Facebook 的便捷库: https://github.com/facebook/fishhook

#import "fishhook.h"

static void *(*orig_malloc)(size_t __size);
void *my_malloc(size_t size)
{
printf("Allocated: %zu\n", size);
return orig_malloc(size);
}
/* .. */
- (void)testMyTestCase
{
//hook malloc
rebind_symbols((struct rebinding[1]){{"malloc", my_malloc, (void *)&orig_malloc}}, 1);

char *a = malloc(100);

//restore original
rebind_symbols((struct rebinding[1]){{"malloc", orig_malloc, NULL}}, 1);

//...
}

关于objective-c - 在 Objective-C 中模拟 C 库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com