如何解决Xamarin.Forms UI 测试在 ViewModel 中模拟依赖项
我正在尝试模拟一个注入到我的 Xamarin.Forms 视图模型中的 viewmodel 中的接口依赖项。我目前正在使用 TinyIoC 容器来注册我的界面及其 混凝土类型。我目前也在容器中注册 viewmodel。
在我的 UITest 中,我试图模拟这个接口,因为它进行了 API 调用。我正在使用 Moq 库来模拟我的依赖项。我当前的实现似乎不起作用,但我是 Xamarin 的新手并使用 IoC 容器,所以很可能我设置不正确。
各方面的实现如下:
App.xaml.cs
public partial class App
{
public static TinyIoCContainer container = new TinyIoCContainer();
private static IBiometricAuthentication _biometricAuthentication;
public App()
{
_biometricAuthentication = DependencyService.Resolve<IBiometricAuthentication>();
InitializeComponent();
container.Register<IAuthService,AWSCognito>();
container.Register(new LoginPageviewmodel(_biometricAuthentication,container.Resolve<IAuthService>()));
MainPage = new NavigationPage(new LoginPage());
}
}
LoginPage.xaml.cs
[XamlCompilation(XamlCompilationoptions.Compile)]
public sealed partial class LoginPage
{
public LoginPage()
{
InitializeComponent();
BindingContext = App.container.Resolve<LoginPageviewmodel>();
}
}
LoginPageviewmodel.cs
class LoginPageviewmodel : INotifyPropertyChanged
{
private readonly IBiometricAuthentication _bioInterface;
private readonly IAuthService _authAPI;
public LoginPageviewmodel(IBiometricAuthentication bioInterface,IAuthService authAPI)
{
_bioInterface = bioInterface;
_authAPI = authAPI;
}
}
LoginPageTest.cs
[SetUp]
public virtual void BeforeEachtest()
{
var mocker = new Mock<IAuthService>();
mocker.Setup(x => x.SignIn(It.IsAny<string>(),It.IsAny<string>())).Returns(() => new MockAuthService().SignIn("a","a"));
mocker.Setup(x => x.IsMockService()).Returns(() => new MockAuthService().IsMockService());
App.container.Register(mocker.Object);
AppManager.StartApp();
}
public class MockAuthService : IAuthService
{
public bool IsMockService()
{
return true;
}
public Task<AuthenticationContext> SignIn(string username,string password)
{
Task.Delay(2000);
return Task.Fromresult(new AuthenticationContext(CognitoResult.Ok)
{
IdToken = "SUCCESS_TOKEN",});
}
public Task<AuthenticationContext> UpdatePassword(string username,string newPassword,string sessionId)
{
return Task.Fromresult(new AuthenticationContext(CognitoResult.Ok));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。