单元测试 – UIApplication.sharedApplication().委托作为AppDel
发布时间:2020-12-14 05:26:40 所属栏目:百科 来源:网络整理
导读:我正在尝试在 swift中使用单元测试来测试一些真正的应用程序行为. 当我尝试从我的测试函数将de UIApplicationDelegate投射到我的AppDelegate时,我得到了EXC_BAD_ACCESS异常.测试代码下方: func testGetAppDelegate(){ let someDelegate = UIApplication.sha
我正在尝试在
swift中使用单元测试来测试一些真正的应用程序行为.
当我尝试从我的测试函数将de UIApplicationDelegate投射到我的AppDelegate时,我得到了EXC_BAD_ACCESS异常.测试代码下方: func testGetAppDelegate(){ let someDelegate = UIApplication.sharedApplication().delegate let appDelegate = someDelegate as AppDelegate //EXC_BAD_ACCESS here XCTAssertNotNil(appDelegate,"failed to get cast pointer") } AppDelegate类设置为public,因此从访问级别来看不是问题. 在同一个测试目标中使用objective-c可行.简单说明下面: AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; debuger说someDelegate是一个Builtin.RawPointer.不知道那是什么,我不熟悉低级细节.
我认为您已将AppDelegate.swift添加到测试目标成员.
当您这样做时,AppName.AppDelegate和AppNameTests.AppDelegate成为不同的类.然后,UIApplication.sharedApplication().delegate返回AppName.AppDelegate实例,但您尝试将其强制转换为AppNameTests.AppDelegate类型.这会导致EXC_BAD_ACCESS. 而不是那样,你必须从你的应用程序模块导入它. import UIKit import XCTest import AppName // <- HERE class AppNameTests: XCTestCase { // tests,tests... } 并且,必须将AppDelegate类及其方法和属性声明为public才能从测试模块中看到. import UIKit @UIApplicationMain public class AppDelegate: UIResponder,UIApplicationDelegate { public var window: UIWindow? public func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. return true } // ... 同样,请务必从Test目标成员中删除AppDelegate.swift. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |