Mig*_*Slv 7 unit-testing pointers swift
我正在尝试在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")
}
Run Code Online (Sandbox Code Playgroud)
AppDelegate类设置为public,因此从访问级别来看不是问题.
在同一测试目标中使用objective-c可行.简单说明下面:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
Run Code Online (Sandbox Code Playgroud)
debuger说someDelegate是一个Builtin.RawPointer.不知道那是什么,我不熟悉低级细节.
rin*_*aro 10
我认为你加入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...
}
Run Code Online (Sandbox Code Playgroud)
并且,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
}
// ...
Run Code Online (Sandbox Code Playgroud)
同样,请务必AppDelegate.swift从测试目标成员中删除.
| 归档时间: |
|
| 查看次数: |
5599 次 |
| 最近记录: |