Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用URLRequestConvertible的单元测试中的链接错误_Ios_Swift_Unit Testing_Xcode7_Alamofire - Fatal编程技术网

Ios 使用URLRequestConvertible的单元测试中的链接错误

Ios 使用URLRequestConvertible的单元测试中的链接错误,ios,swift,unit-testing,xcode7,alamofire,Ios,Swift,Unit Testing,Xcode7,Alamofire,我在为一个非常简单的函数编写一个简单的单元测试(Xcode 7.2)时遇到了一个奇怪的问题,该函数可以确保在URL中添加一个参数: func appendToken(token: String, toRequest request: URLRequestConvertible) throws -> URLRequestConvertible { var error: NSError? let modifiedRequest: NSMutableURLRequest

我在为一个非常简单的函数编写一个简单的单元测试(Xcode 7.2)时遇到了一个奇怪的问题,该函数可以确保在URL中添加一个参数:

func appendToken(token: String, toRequest request: URLRequestConvertible) throws -> URLRequestConvertible {
    var error: NSError?
    let modifiedRequest: NSMutableURLRequest
    (modifiedRequest, error) = Alamofire.ParameterEncoding.URL.encode(request, parameters: ["token": self.token])

    guard error == nil else {
        // TODO: handle error
        throw error!
    }

    return modifiedRequest
}
单元测试如下所示:

func testTokenAddition() {
    let token = "ABCD12345"
    let client = MyClass(token: token)
    let originalRequest = NSURLRequest(URL: NSURL(string:"http://localhost")!)

    do {
        let modifiedRequest = try client.appendToken(token, toRequest: originalRequest).URLRequest
        XCTAssertTrue(modifiedRequest.URLRequest.URLString.hasSuffix("token=\(token)"))
    } catch {
        XCTFail()
        print(error)
    }
}
显然,这是一个非常简单的测试,我想在此基础上进行构建(所以请不要关注实际的断言)。但是,当我尝试运行测试时,会出现以下链接错误:

Undefined symbols for architecture x86_64:
  "protocol witness table for __ObjC.NSURLRequest : Alamofire.URLRequestConvertible in Alamofire", referenced from:
  SDKitTests.SDKitTests.testTokenAddition (SDKitTests.SDKitTests)() -> () in SDKitTests.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
当我从一个普通的目标运行它时,这个函数可以工作,所以问题出在测试函数中,但我不清楚应该如何调用它,我在一个非测试类中运行相同的代码,没有问题,所以我对此有点困惑。此外,错误消息有点神秘,从我在谷歌上搜索到的情况来看,见证表有点像协议的vtable。但是我没有弄糟,对
NSMutableURLRequest
的扩展是在Alamofire中实现的,我只是在使用它


我做错了什么?我需要做什么来修复它?

确保Alamofire库与您的测试目标链接


您可能还需要删除
inherit!:从测试目标搜索路径。

确保Alamofire库与测试目标链接


您可能还需要删除
inherit!:从测试目标搜索路径。

Alamofire库是否与测试目标链接?Doh!好电话。当我添加Alamofire豆荚时,我以为可可豆荚可以解决这个问题,但显然没有。链接到它确实起了作用。请作为答案发布,以便我可以接受。Alamofire库是否与您的测试目标链接?Doh!好电话。当我添加Alamofire豆荚时,我以为可可豆荚可以解决这个问题,但显然没有。链接到它确实起了作用。请作为答案发布,以便我可以接受。您如何将Alamofire与您的测试目标联系起来?我找不到这方面的任何信息。你在用椰子荚吗?将
pod Alamofire
添加到您的测试目标中,就像您的主要应用程序目标一样。啊,就是这样。我曾在某个地方读到过这样一句话:把
inherit!:pod文件的测试模块部分中的搜索路径将把链接到应用程序的任何框架链接到测试模块。我想他们错了。我注释掉了
inherit!:搜索路径
并将其替换为
pod'Alamofire
thanksHow您是否将Alamofire与测试目标链接?我找不到这方面的任何信息。你在用椰子荚吗?将
pod Alamofire
添加到您的测试目标中,就像您的主要应用程序目标一样。啊,就是这样。我曾在某个地方读到过这样一句话:把
inherit!:pod文件的测试模块部分中的搜索路径将把链接到应用程序的任何框架链接到测试模块。我想他们错了。我注释掉了
inherit!:搜索路径
并将其替换为
pod'Alamofire
谢谢