无法在XCTest中将App Delegate转换为App Delegate

时间:2016-06-28 09:13:10

标签: ios iphone xcode unit-testing xctest

我在Xcode 7.3.1中的ios应用程序中工作。我正在尝试在我的swift iOS应用程序上开始单元测试。我无法访问任何使用我的appDelegate.I尝试以下从以下解决。但仍然得到相同的问题。请帮我解决这个问题。 link1link2

我正在运行单元测试时遇到以下问题。 我的示例代码是

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).

3 个答案:

答案 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