如何在iOS中对包含I/O操作的方法进行单元测试?
例如,我正在考虑使用Objective-C 分类来重新定义诸如imageNamed之类的I/O方法的行为。然而,这会阻止黑盒单元测试,因为需要知道实现中使用了哪些I/O方法。
如何在iOS中对包含I/O操作的方法进行单元测试?
例如,我正在考虑使用Objective-C 分类来重新定义诸如imageNamed之类的I/O方法的行为。然而,这会阻止黑盒单元测试,因为需要知道实现中使用了哪些I/O方法。
要么传递I/O操作的结果,以便可以提供测试数据来代替实际的I/O数据,要么使用OCMock。我已经为此目的使用了OCMock。如果您正在考虑OCMock,请至少阅读所有可用方法的头文件。
如果要处理遗留代码,请考虑阅读/学习Michael Feathers的书Working Effectively with Legacy Code。
在第三方框架中替换方法实现是一件非常危险的事情,因为你无法确定内部实现细节,也就无法知道你可能会无意中破坏的依赖关系。这也非常脆弱——即使它今天能够正确地工作,它也可能在未来的框架版本中破坏某些东西。
没有任何单元测试可以保证你以这种方式进行的更改的有效性。如果你只是出于实验目的而做这样的事情,我相信那可能很有趣,也可能有助于学习,但那时你不必担心黑盒测试。
考虑是否可以通过添加与现有方法并行的方法来完成所需的操作,而不是替换框架的方法实现。