Xcode UITest和蓝牙:搜索外围设备不返回外围设备

时间:2018-04-10 07:19:00

标签: ios xcode bluetooth xctest uitest

我有一个应用程序,我想在Xcode中使用XCTest进行测试。为了进行测试,我需要扫描Testcase中的设备以执行特定的行为。

问题是,我在扫描它时找不到任何外围设备,尽管我的代码在原始应用程序中运行良好。可能是XCtest不允许从UITests触发蓝牙通信吗?

我在某个方面,我没有进一步的想法如何继续下去。也许有人对我有好的暗示。

我的代码如下所示:UITests是用Swift编写的,我有一个Helper类来执行Objective-C中的蓝牙特定代码。 所以首先我在我的Swift文件中创建这个Objective-C辅助类作为全局变量:

var helper : ObjectiveCTestsHelper?

在UITest文件的设置功能中,我初始化了这个变量:

helper = ObjectiveCTestsHelper()

在测试功能中,我然后执行蓝牙特定功能并等待它具有虚拟期望,以便UITest不会终止:

let expectation = XCTestExpectation(description: "Dummy")
helper!.scanForDevices()
self.wait(for: [expectation], timeout: 1000)

scanForDevices函数如下所示:

- (void) scanForDevices {
    self.bleScanningModel = [[BluetoothScanningModel alloc] init];

    [self.bleScanningModel startScan:50.0
                             repeats:YES
                          completion:^(NSDictionary *periperals) {
                              //here no peripherals
                          }];
}

startScan方法扫描设备:

- (void)startScan:(NSTimeInterval)period
          repeats:(BOOL)repeats
       completion:(void (^)(NSDictionary *periperals))completion {

    if (self.isScanning) {
        int a = 3;
        return;
    }
    self.isScanning = true;

    foundPeriperals = [[NSMutableDictionary alloc] init];

    self.completionHandler = completion;
    self.repeats = repeats;

    scanPeriodTimer = [NSTimer scheduledTimerWithTimeInterval: period
                                                       target: self
                                                     selector: @selector(periodTimerFired:)
                                                     userInfo: nil
                                                      repeats: self.repeats];

    [self checkIfBluetoothIsPoweredUp:^(BOOL success) {
            [centralManager scanForPeripheralsWithServices: nil 
                                                   options: nil];
    }];
}

基本上,它只是检查Bluetooth是否已启动,然后扫描外围设备。在5秒之后,触发计时器以返回到startScan方法以基于找到的外围设备执行功能。 这是我的问题。我执行 scanForPeripheralsWithServices ,但是当找到外围设备时,中央管理器不会调用函数 didDiscoverPeripheral ,所以我没有可以使用的外围设备。

是否允许Bluetooth直接从UITests执行?

我希望有人可以帮助我!谢谢!

0 个答案:

没有答案