我有一个应用程序,我想在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
执行?
我希望有人可以帮助我!谢谢!