gpt4 book ai didi

ios - 如何为 iOS TDD stub /模拟 C 函数?

转载 作者:可可西里 更新时间:2023-11-01 03:42:00 24 4
gpt4 key购买 nike

我目前正在创建一个 TDD 应用程序,但我在测试我的应用程序所需的 C 函数的使用时遇到了问题。这是我需要测试的示例函数:

UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil)

我如何为 TDD 模拟或 stub C 方法?

最佳答案

有几种方法可以做到这一点,但不如 OOP 语言那么漂亮。这是我使用的列表:

使用函数指针

这种方法是我最喜欢的方法,因为在我看来它是最灵活的。

在头文件(*.h)中

int (*_fun) (int);

int fun (int a);

int fun_mock (int a);

在测试用例文件(*.C)中

_fun = fun_mock;

在正常情况下文件(*.C)

_fun = fun;

调用函数(main.C)

...
_fun ();
...

编译

如果你想制作 TDD,你需要编译测试文件和主要文件(或其余文件)。否则不编译测试文件。

使用宏替换函数名

头文件(*.h)中

如果你想叫乐趣

#define FUN fun

int fun (int a);

int fun_mock (int a);

头文件(*.h)中

如果要调用mock版本

#define FUN fun_mock

int fun (int a);

int fun_mock (int a);

调用函数(main.C)

...
FUN ();
...

使用这种方法,我们需要在编译任何模块之前设置正确的定义。

使用带有函数指针的结构

老实说,我从来没有使用过这种方法,但我在其他一些地方看到过。主要思想是为模块的所有不同函数提供一个结构指针,无论何时您想要更改一个函数,您只需更改该结构上该函数指针的地址。最后是与第一种方法类似的策略,但实现方式不同。

根据蒂莫西·琼斯的说法

test-dept 是一个相对较新的 C 单元测试框架,允许您对函数进行运行时 stub 。我发现它非常易于使用 - 这是他们文档中的示例:

void test_stringify_cannot_malloc_returns_sane_result() {
replace_function(&malloc, &always_failing_malloc);
char *h = stringify('h');
assert_string_equals("cannot_stringify", h);
}

虽然下载部分有点过时,但似乎开发得相当积极 - 作者非常及时地解决了我遇到的问题。您可以获得最新版本(我一直在使用,没有问题):

svn结帐http://test-dept.googlecode.com/svn/trunk/测试部门只读该版本最后更新于 2011 年 10 月。

但是,由于 stub 是使用汇编程序实现的,因此可能需要一些努力才能使其支持 ARM。

我从https://stackoverflow.com/a/9613821/2420872复制的最后一点.

关于ios - 如何为 iOS TDD stub /模拟 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16760996/

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