如何为iOS TDD存根模拟C函数?

如何为iOS TDD存根模拟C函数?,第1张

概述我目前正在创建一个TDD应用程序,但是我在测试应用程序所需的C函数的使用时遇到了问题.这是我需要测试的示例函数: UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil) 如何为TDD模拟存根C方法? 有几种方法可以做到但不如OOP语言那么漂亮.这里列出我使用的: 使用函数指针 这种方法是我最喜欢的方法,因为在我看来这是最灵活的方 我目前正在创建一个TDD应用程序,但是我在测试应用程序所需的C函数的使用时遇到了问题.这是我需要测试的示例函数:
UIImageWritetoSavedPhotosAlbum(imagetoBeSaved,nil,nil)

如何为TDD模拟或存根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 funint fun (int a);int fun_mock (int a);

在头文件(* .h)中

如果你想调用模拟版本

#define FUN fun_mockint fun (int a);int fun_mock (int a);

调用函数(main.C)

...FUN ();...

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

使用带有函数指针的结构

说实话,我从来没有使用过这种方法,但我在其他地方读过.主要思想是为模块的所有不同函数提供结构指针,每当您想要更改函数时,只需更改该结构上此函数指针的地址即可.最后是与第一种方法类似的策略,但以不同的方式实现.

根据蒂莫西琼斯的说法

test-dept是一个相对较新的C单元测试框架,允许您对函数进行运行时存根.我发现它很容易使用 – 这是他们的文档中的一个例子:

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 checkout http://test-dept.googlecode.com/svn/trunk/ test-dept-read-only
该版本最后更新于2011年10月.

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

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

总结

以上是内存溢出为你收集整理的如何为iOS TDD存根/模拟C函数?全部内容,希望文章能够帮你解决如何为iOS TDD存根/模拟C函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1106985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存