如何在开发过程中正确创建可测试的场景?

时间:2014-05-10 03:19:04

标签: ios objective-c xcode tdd chromecast

在努力将Google Cast SDK实施到iOS应用程序中时,我遇到了这个问题并且无法提出可扩展,高效的解决方案,但是有点想法比我必须能够给我一些想法:

Google的Chromecast iOS SDK附带GCKDeviceScanner类,用于管理可用投射接收器(即Chromecast HDMI加密狗)的发现。为了与此相抗衡,显然最好是将Chromecast插入开机电视的房间。

但是,这可能并非总是可行,也不依赖于可用的网络资源使代码易于测试。为了解决这个问题,我创建了MockGCKDeviceScannerGCKDeviceScanner的子类)并覆盖了适用的方法以返回虚假接收设备进行开发/测试。现在我能够继续编码,即使没有物理接收器可用。

但我发现融入我的实际课程相当繁琐。在上面的例子中,我有一个

@property (nonatomic, strong) GCKDeviceScanner *scanner

然而,在实际初始化时,我做了这个相当丑陋的解决方法:

#ifdef kDevMode
_scanner = [[MockGCKDeviceScanner alloc] init];
#else
_scanner = [[GCKDeviceScanner alloc] init];
#endif

这看起来并不好......并且使我的代码看起来非常麻烦。 正确做这种事的方式是什么?

2 个答案:

答案 0 :(得分:0)

你是如何运行测试的?你在使用任何框架吗?

一种选择是定义两种不同的方案,每种方案一种。其中一个可以在方案中定义一个系统变量,该变量将在运行时用于决定为测试加载哪个类

答案 1 :(得分:0)

你可以" inject"扫描器通过构造函数,将具体类的选择推迟给调用者。

根据对象图的深度,您可能需要某种locator对象,但代价是引入全局引用。