如何在命令行 GHUnit 中使用 UIApplicationDelegate?
Posted
技术标签:
【中文标题】如何在命令行 GHUnit 中使用 UIApplicationDelegate?【英文标题】:How can I use UIApplicationDelegate in command line GHUnit? 【发布时间】:2011-06-25 19:05:18 【问题描述】:我对从模拟器运行和从命令行运行的 GHUnit 结果存在差异。 如何在 cli 中使用 UIApplicationDelegate?
在我的sample app - tags ***-6479906 中。 我想将苹果的 OCUnit 示例转移到 GHUnit 一个。
预期:
两个“appDelegate”都不为零。
当前:
从模拟器运行正常。但是从 cli 运行会引发异常。https://gist.github.com/1046753
参考:apple's unittest example
注意:我阅读了异步 NSURLConnection 示例,但在我的 UIApplicationDelegate 案例中没有找到解决方案和调整。
【问题讨论】:
【参考方案1】:我建议您为您的应用委托设计测试用例,以便它实例化它的一个实例并从那里调用方法和测试输出。
考虑如下结构:
@interface FizzBuzzObjCStudyTest : GHTestCase
ObjCStudyAppDelegate *appDelegate;
@end
@implementation FizzBuzzObjCStudyTest
-(void)setUp
appDelegate = [[ObjCStudyAppDelegate alloc] init];
-(void)tearDown
[appDelegate release];
-(void) testAppDelegate
GHAssertNotNil(appDelegate, @"Cannot find the application delegate", nil);
// test other methods of ObjCStudyAppDelegate here, or make more test methods.
@end
GHUnit 框架绕过了在 CLI 版本中创建 UIApplicationDelegate 的 UI 框架。事实上,GUI 版本的 GHUnit 实际上是在实例化自己的 UIApplicationDelegate,称为 GHUnitIPhoneAppDelegate。
这是来自 GHUnitiosMain.m 的 sn-p,展示了它如何为 GUI 版本设置自己的应用程序委托:
// If GHUNIT_CLI is set we are using the command line interface and run the tests
// Otherwise load the GUI app
if (getenv("GHUNIT_CLI"))
retVal = [GHTestRunner run];
else
retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");
【讨论】:
这会使测试变为绿色。伟大的!但我觉得 CLI 和 GUI 之间存在一些差异。我不在 CLI 版本中使用 UIApplication?我可以用 OCUnit 做到这一点。 GHUnit 似乎需要自己的应用程序委托类来运行它呈现的 GUI。我编辑了答案以包含来自 GHUnitIOSMain.m 的 sn-p。所以 GUI 版本不会像 OCUnit 那样隐式创建您的应用程序委托。以上是关于如何在命令行 GHUnit 中使用 UIApplicationDelegate?的主要内容,如果未能解决你的问题,请参考以下文章
GHUnit,OCMock:如何测试两个指定块之一是不是被调用?
xcode 中的单元测试(使用 GHUnit 和 OCMock)