我在应用程序测试模式下运行单元测试,以便在XCode中进行UI自动化测试。我的应用程序加载并将其导航控制器设置为单例,并且每当主应用程序调用[navigationManager sharedInstance]时,它都会返回单例。但是,在我的XCTest中,当我尝试访问[navigationManager sharedInstance]时,它返回nil。有谁知道为什么会这样?
答案 0 :(得分:0)
解决方案是:在编写单元测试时不使用sharedInstance
在navigationManager
课程中,您使用init
方法,因此在unit test
中,使用init创建实例,并使用该方法进行测试。
共享实例在测试中效果不佳,这是因为更好地使用Dependency Injection
,因此初始化一个对象并将其传递给您希望使用它的每个其他对象。
例如,我在DataManager
中初始化我的AppDelegate
,然后将dataManager
传递给我的rootViewController
。如果我打开另一个控制器,我将dataManager
传递给它,等等。
这也是要测试的最佳架构,因为在您的测试中,您还可以创建MOCK
DataManager
并使用它将其传递给viewController
并测试其他内容。