是否可以为使用 Xamarin.Essentials: Geolocation API 的函数创建单元测试?

Mat*_*ski 3 c# unit-testing xunit xamarin xamarin.essentials

在我的Locationer课上,我有GetLocationAsync()使用 Xamarin.Essentials: Geolocation 的函数。这个函数工作正常,但我想为这个函数创建单元测试。

我创建了 xUnitTests 项目和单元测试:

public async Task LocationTest()
{
    Locationer locationer = new Locationer();
    var actual = locationer.GetLocationAsync();

    Assert.Equal("test", actual);
}
Run Code Online (Sandbox Code Playgroud)

在 Xamarin Forms 项目中,GetLocationAsync()返回“纬度:46.55465,经度:15.64588,海拔:262”。

在我的单元测试中GetLocationAsync()返回“此程序集的便携式版本中未实现此功能”

是否可以在我的单元测试项目中使用 Xamarin.Essentials: Geolocation?我该如何解决?

Che*_*ron 6

Ryan Davis 基于 Xamarin.Essentials 创建了接口:https ://www.nuget.org/packages/Xamarin.Essentials.Interfaces/

通过这种方式,您可以在 IoC 容器中注册 Essentials 实现:

builder.Register<IGeolocation, GeolocationImplementation>();
Run Code Online (Sandbox Code Playgroud)

你可以用 Moq 之类的东西模拟接口:

var mockGeo = new Mock<IGeolocation>();
mockGeo.Setup(x => x.GetLocationAsync())
   .ReturnsAsync(() => new Location());
Run Code Online (Sandbox Code Playgroud)