XCTest案例无法访问导航控制器

时间:2014-05-09 18:22:39

标签: ios unit-testing singleton

我在应用程序测试模式下运行单元测试,以便在XCode中进行UI自动化测试。我的应用程序加载并将其导航控制器设置为单例,并且每当主应用程序调用[navigationManager sharedInstance]时,它都会返回单例。但是,在我的XCTest中,当我尝试访问[navigationManager sharedInstance]时,它返回nil。有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

解决方案是:在编写单元测试时不使用sharedInstance

navigationManager课程中,您使用init方法,因此在unit test中,使用init创建实例,并使用该方法进行测试。

共享实例在测试中效果不佳,这是因为更好地使用Dependency Injection,因此初始化一个对象并将其传递给您希望使用它的每个其他对象。

例如,我在DataManager中初始化我的AppDelegate,然后将dataManager传递给我的rootViewController。如果我打开另一个控制器,我将dataManager传递给它,等等。 这也是要测试的最佳架构,因为在您的测试中,您还可以创建MOCK DataManager并使用它将其传递给viewController并测试其他内容。