0

从模拟器运行和从命令行运行之间的 GHUnit 结果存在差异。如何在 cli 中使用 UIApplicationDelegate?

在我的示例应用程序中 - 标签 stackoverflow-6479906。我想将苹果的OCUnit示例转移到GHUnit之一。

预计:

两个“appDelegate”都不为零。

当前的:

从模拟器运行工作正常。但是从 cli 运行会引发异常。https://gist.github.com/1046753

参考:苹果的单元测试示例

注意:我阅读了异步 NSURLConnection 示例,但在我的 UIApplicationDelegate 案例中没有找到解决方案和调整。

4

1 回答 1

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 的片段,展示了它如何为 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");
}
于 2011-07-17T10:26:53.333 回答