使用URLRequestConvertible在unit testing中链接错误

我有一个奇怪的问题写一个简单的unit testing(Xcode 7.2)一个非常简单的function,确保参数被添加到一个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 } 

unit testing是这样的:

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

显然这是一个非常简单的testing,我想build立在这个基础上(所以请不要关注实际的断言)。 但是,当我尝试运行testing,我得到这个链接错误:

 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) 

当我从一个普通的目标运行它的时候,这个函数就起作用了,所以问题出现在testing函数中,但是我不清楚应该怎样调用它,我在非testing类中运行相同的代码,问题,所以我有点困惑。 同样的错误信息有点神秘,从我谷歌search,见证表就像一个协议的虚拟表。 但是我没有搞砸, NSMutableURLRequest的扩展是在Alamofire中实现的,我只是使用它。

我究竟做错了什么? 我需要做些什么来解决它?

确保Alamofire图书馆与您的testing目标相关联。

您可能还需要删除inherit! :search_paths inherit! :search_paths来自testing目标的inherit! :search_paths