gpt4 book ai didi

c# - 在 Windows 应用商店单元测试中使用 Windows.Devices.Geolocation.Geolocator

转载 作者:行者123 更新时间:2023-11-30 17:08:34 29 4
gpt4 key购买 nike

我在 Windows 商店单元测试项目中进行了此单元测试,使用 this overload of GetGeopositionAsync地理定位器:

[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 的回答中所指出的,我可以使用假货。

我还编写了另一个订阅 GeoLocatorStatusChangedPositionChanged 事件的测试(后者应该初始化定位器) ,然后等待一分钟。在 StatusChanged 处理程序中,我跟踪了当前的 LocationStatus,除了在我创建 Geolocator 后立即跟踪它。

本次测试中Geolocator的LocationStatusNotInitialised开始,永远不会改变。

现在我认为这是一个与以下事实有关的阻塞问题(引用开头链接中的 GetGeopositionAsync 文档):

The first use of the Geolocator object to call GetGeopositionAsync must be made on the UI thread so that the consent prompt can be shown to the user. For more information, see Guidelines for devices that access personal data.

所以我的猜测是:

  • a) 调用是在 UI 线程上进行的(不太可能),但因为没有 UI 表面(除了在调试Windows 商店单元测试),无法显示 UI,因此调用永远不会完成。
  • b) 调用不是在 UI 线程上进行的,因此无法显示任何 UI,因此调用永远不会完成。

无论哪种方式,我得出的结论是不可能在 Windows 应用商店单元测试中使用 Geolocator,因为我不可能同意我自己的单元测试来访问位置服务!同样,令我感到沮丧的是,这样一个核心组件会允许自己无限期地运行,只是因为无法显示 UI - 这太糟糕了。

有人必须面对这个吗?如果能够对使用地理位置的代码进行单元测试,那就太好了!

最佳答案

您不应该对库调用进行单元测试。你的单元测试应该只测试你自己的逻辑。

然后您可以通过提供模拟 Geolocator 对象来完全避免此问题,因为它不会有 UI 同意弹出对话框或超时延迟。

关于c# - 在 Windows 应用商店单元测试中使用 Windows.Devices.Geolocation.Geolocator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13644185/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com