ジオロケーターのGetGeopositionAsyncのこのオーバーロードを使用して、WindowsStoreの単体テストプロジェクトでこの単体テストを実行します。
[TestMethod]
public async Task TestFunc()
{
var locator = new Windows.Devices.Geolocation.Geolocator();
var l = await
locator.GetGeopositionAsync(TimeSpan.MaxValue, TimeSpan.FromSeconds(10));
Assert.IsNotNull(l);
}
しかし、このテストは合格しないだけでなく、10秒後にバンクアウトすることもありません-それは決して終了しません(私はそれを殺す前に10分間待っていました)。
これは、実際に実行したかったテストのペアダウンバージョンであることを強調する必要があります。Windowsの単体テストだけを試みているのではありません。John Detersの回答で指摘されているように、代わりに偽物を使用することもできます。
また、イベントをサブスクライブして(後者はロケーターを初期化する必要があります)、1分間待機する別のテストを作成しましGeoLocator
た。ハンドラーでは、Geolocatorを作成するとすぐにトレースすることに加えて、現在のをトレースします。StatusChanged
PositionChanged
StatusChanged
LocationStatus
このLocationStatus
テストのGeolocatorのは、で始まり、NotInitialised
変更されることはありません。
今、私はこれが次の事実に関係するブロッキングの問題であると考えています(GetGeopositionAsync
最初のリンクのドキュメントから引用):
GetGeopositionAsyncを呼び出すためのGeolocatorオブジェクトの最初の使用は、同意プロンプトをユーザーに表示できるように、UIスレッドで行う必要があります。詳細については、個人データにアクセスするデバイスのガイドラインを参照してください。
だから私の推測は次のいずれかです:
- a)呼び出しはUIスレッドで行われていますが(可能性は低いです)、UIサーフェスがないため(Windowsストアの単体テストのデバッグ時にときどき表示される奇妙な黒い画面を除く)、UIを表示できないため、呼び出しが行われます。決して完了しません。
- b)UIスレッドで呼び出しが行われていないため、UIを表示できないため、呼び出しが完了しません。
Geolocator
いずれにせよ、位置情報サービスにアクセスするために自分の単体テストに同意することは不可能であるため、WindowsStoreの単体テストで使用することは不可能であるという結論に達しました。同様に、そのようなコアコンポーネントが、UIを表示できないという理由だけで、それ自体が無期限に実行されることを許可することに失望しています-それはただ貧弱です。
誰もがこれに直面しなければなりませんでしたか?ジオロケーションを使用するコードを単体テストできると本当にいいでしょう!