我在Xcode 7.3.1中的ios应用程序中工作。我正在尝试在我的swift iOS应用程序上开始单元测试。我无法访问任何使用我的appDelegate.I尝试以下从以下解决。但仍然得到相同的问题。请帮我解决这个问题。 link1, link2
我正在运行单元测试时遇到以下问题。 我的示例代码是
import UIKit
import XCTest
@testable import MyAppName
class FreshBossTests: XCTestCase {
var login:LoginPageController!
override func setUp() {
super.setUp()
login = LoginPageController()
}
override func tearDown() {
super.tearDown()
}
func testlogin() {
let email:String! = "xxx@gmail.com"
if login.isValidEmail(email) == true {
XCTAssertEqual(true, true,"email in valid format")
}
}
在我的LoginPageController中,我有以下代码。
let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
在那一行中我只得到像
这样的错误Could not cast value of type 'MyAppName.AppDelegate' (0x10dc09e80) to 'MyAppNameTests.AppDelegate' (0x11cc190c0).
答案 0 :(得分:0)
如暗示建议,请像ProductModuleName.AppDelegate
一样使用它。所以在你的情况下它将是
let appDelegate = UIApplication.sharedApplication().delegate as! MyAppName.AppDelegate
MyAppName
应该是您的应用目标模块的名称,而不是您的测试目标。如果您不确定应用目标构建设置中的模块名称搜索Product Module Name
答案 1 :(得分:0)
在setup()函数中,而不是“login = LoginPageController()” 使用这些行
let storyBoard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType))
login = storyBoard.instantiateViewControllerWithIdentifier("LoginView") as! LoginPageController
我遇到了同样的问题,这帮助了我。
答案 2 :(得分:0)
您可以在XCTest文件的顶部导入生产模块。
@testable import MyAppName
然后这会让你像:
Swift 3
let appDelegate = UIApplication.shared.delegate as! MyAppName.AppDelegate