在iPhone上用于行为驱动开发的最佳技术是什么?什么是一些开源示例项目,证明了这些技术的合理使用?以下是我发现的一些选项:
UI自动化(适用于设备)
可以使用Cucumber(用JavaScript编写)来驱动UI自动化.这将是一个伟大的开源项目.然后,我们可以编写Gherkin来运行UI自动化测试.现在,我只会写Gherkin作为评论.
更新:Zucchini框架似乎融合了Cucumber和UI Automation!:)
旧博客帖子:
弗兰克和iCuke(基于黄瓜会见iPhone谈话)
我已将Google Toolbox for Mac安装到Xcode中,并按照说明在此处设置单元测试.
这一切都很好,我可以在我的所有对象上测试我的同步方法.但是,我实际想要测试的大多数复杂API通过调用委托上的方法异步返回结果 - 例如,对文件下载和更新系统的调用将立即返回,然后在文件完成下载时运行-fileDownloadDidComplete:方法.
我如何将其作为单元测试进行测试?
好像我想要testDownload函数,或者至少要测试框架'等待'fileDownloadDidComplete:方法来运行.
编辑:我现在已经切换到使用XCode内置XCTest系统,并发现Github 上的TVRSMonitor提供了一种简单的方法来使用信号量等待异步操作完成.
例如:
- (void)testLogin {
TRVSMonitor *monitor = [TRVSMonitor monitor];
__block NSString *theToken;
[[Server instance] loginWithUsername:@"foo" password:@"bar"
success:^(NSString *token) {
theToken = token;
[monitor signal];
}
failure:^(NSError *error) {
[monitor signal];
}];
[monitor wait];
XCTAssert(theToken, @"Getting token");
}
Run Code Online (Sandbox Code Playgroud) 有没有人知道任何允许使用OCUnit测试异步代码的现有库?我正在考虑类似GHAsyncTestCase但是从中传递的东西SenTestCase.
我问,因为如果我找不到任何我将要移植GHAsyncTestCase到OCUnit,但我不想复制其他人已完成的工作.
我正在使用OCMock测试真实的Web服务调用.
现在我做的事情如下:
- (void)testWebservice
{
id mydelegatemock = [OCMockObject mockForProtocol:@protocol(MySUTDelegate)];
[[mydelegatemock expect] someMethod:[OCMArg any]];
[SUT sutWithDelegate:mydelegatemock];
// we need to wait for real result
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];
[(OCMockObject*)mydelegatemock verify];
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它暗示每个这样的测试将需要2秒.
有没有一种方法我可以设置例如,2秒的超时,并让一个呼叫someMethod的mydelegatemock立即verify和完成测试案例?
ios ×3
iphone ×3
asynchronous ×2
unit-testing ×2
cucumber ×1
objective-c ×1
ocmock ×1
rspec ×1
timeout ×1