Если это корневой контроллер представления, вы должны просто сделать его свойством делегата приложения:
@interface MyAppDelegate : NSObject <UIApplicationDelegate>
@property(retain)FirstViewController *firstViewController;
@end
@implementation MyAppDelegate
@synthesize firstViewController;
...
@end
Если метод, который вы тестируете, не является методом, где вы инициализируете firstViewController
, выне нужен какой-либо подход ленивой загрузки.Вы просто получаете делегат приложения в своем тесте, создаете экземпляр FirstViewController
и назначаете его свойству для своего делегата, и определяете тест:
-(void)testSomething {
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
FirstViewController *firstViewController = [[FirstViewController alloc] init];
appDelegate.firstViewController = firstViewController;
// test some app delegate method
...
}
Если вы хотите макетировать контроллер длячто бы вы ни тестировали, вы также можете сделать это:
-(void)testSomething {
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
id mockController = [OCMockObject mockForClass:[FirstViewController class]];
appDelegate.firstViewController = mockController;
[[mockController expect] someControllerMethod];
// test some app delegate method
...
[mockController verify];
}