Я пишу код в стиле TDD с помощью MSTest, для Windows 10 Bluetooth Low Energy API.У меня есть обратный вызов, который вызывается операционной системой при обнаружении периферийного устройства BLE во время сканирования.
void StartScan()
{
_BleWatcher = new BluetoothLEAdvertisementWatcher();
_BleWatcher.Received += ScanDiscovery;
_BleWatcher.Start();
}
// this usually fires in under a second, and always in under ten seconds
void ScanDiscovery(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs bleAdvert)
{
Debug.WriteLine("This handler was indeed called.");
throw new Exception();
}
Если во время обратного вызова возникает «Выполнить выбранный тест» и возникает исключение, оно явно не обнаруживаетсязапущенный процесс.Тест проходит, и исключение не мешает тестируемому устройству нормально работать.
[TestMethod]
async Task ScanTest()
{
StartScan();
await Task.Delay(10000);
// this always completes, even though I see the debug message in the Output
}
Однако, если я "Отладить выбранный тест", Visual Studio предупреждает меня об ожидаемом исключении!
Есть ли что-то «другое» в том, как API Windows, такой как BluetoothLEAdtactWatcher.Received будет определять, как исключения маршрутизируются и перехватываются процессом?
Проект ориентирован на .NET Standard2.0, используя этот трюк для доступа к API-интерфейсам UWP.