Can';t在Swift中从XCTest打开NSStream

Can';t在Swift中从XCTest打开NSStream,swift,foundation,xctest,nsstream,Swift,Foundation,Xctest,Nsstream,我正在尝试编写一个测试套接字连接的XTest。下面是我的连接代码大致的样子: public class MyConnection: NSObject, NSStreamDelegate { private let queue = NSOperationQueue() private var inputStream: NSInputStream! private var outputStream: NSOutputStream! public func connect() {

我正在尝试编写一个测试套接字连接的XTest。下面是我的连接代码大致的样子:

public class MyConnection: NSObject, NSStreamDelegate {
  private let queue = NSOperationQueue()
  private var inputStream: NSInputStream!
  private var outputStream: NSOutputStream!

  public func connect() {
    println("Attempting to connect")
    queue.addOperationWithBlock() {
      var readStream: Unmanaged<CFReadStream>?
      var writeStream: Unmanaged<CFWriteStream>?
      CFStreamCreatePairWithSocketToHost(nil,
                                         "[my ip address]",
                                         8333,
                                         &readStream,
                                         &writeStream);
      if readStream == nil || writeStream == nil {
        println("Connection failed")
        return
      }
      self.inputStream = readStream!.takeUnretainedValue()
      self.outputStream = writeStream!.takeUnretainedValue()
      self.inputStream.delegate = self
      self.outputStream.delegate = self
      self.inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode:NSDefaultRunLoopMode)
      self.outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode:NSDefaultRunLoopMode)
      self.inputStream.open()
      self.outputStream.open()
    }
  }

  // MARK: - NSStreamDelegate

  public func stream(stream: NSStream!, handleEvent event: NSStreamEvent) {
    println("THIS NEVER GETS CALLED!")
    // Notifies delegate that connection opened.
  }
}
公共类MyConnection:NSObject、NSStreamDelegate{
private let queue=NSOperationQueue()
私有变量输入流:NSInputStream!
私有变量outputStream:NSOutputStream!
公共函数连接(){
println(“正在尝试连接”)
queue.addOperationWithBlock(){
var readStream:非托管?
var writeStream:非托管?
CFStreamCreatePairWithSocketToHost(无,
“[我的ip地址]”,
8333,
&读流,
&writeStream);
如果readStream==nil | | writeStream==nil{
println(“连接失败”)
返回
}
self.inputStream=readStream!.takeUnrepainedValue()
self.outputStream=writeStream!.takeUnrepainedValue()
self.inputStream.delegate=self
self.outputStream.delegate=self
self.inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(),格式:NSDefaultRunLoopMode)
self.outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(),格式:NSDefaultRunLoopMode)
self.inputStream.open()
self.outputStream.open()
}
}
//马克:代表
公共函数流(流:NSStream!,handleEvent事件:NSStreamEvent){
println(“这永远不会被调用!”)
//通知代理连接已打开。
}
}

我编写的XCTestCase基本上只调用connect()方法,并等待连接成功后调用委托方法。但是,从未调用委托方法。我需要做一些特殊的事情才能在我的测试中工作吗?

这在我的单元测试中失败的事实是一个危险的事实。由于NSOperationQueue的工作方式,此代码无法工作。队列动态创建和销毁线程。因此,我在运行循环中为一个只存在很短时间的线程调度流。因此,我的回调从未被调用,因为运行循环已被破坏


正确的解决方案是直接创建一个NSThread,并使用该线程的运行循环,而不是尝试使用队列。

那么如何解决这个问题,您可以制作一个示例代码吗?