如何测试包含Application.Current.Properties.ContainsKey(“token”)的方法

君不见长松卧壑困风霜,时来屹立扶明堂。这篇文章主要讲述如何测试包含Application.Current.Properties.ContainsKey(“token”)的方法相关的知识,希望能为你提供帮助。
我正在尝试测试我的Xamarin应用程序的登录,但为了使应用程序正常工作,我必须创建一个令牌。方法如下:

public string RetrieveToken() { if (Application.Current.Properties.ContainsKey("token")) { return Application.Current.Properties["token"] as string; } return null; }

但是当测试运行时我收到NullReferenceError,因为Application.Current.Properties.ContainsKey("token")不能在测试中使用。所以我的问题是,是否有办法逃避这一点。
答案你在这个项目中使用任何依赖注入吗?当我们为ViewModel编写单元测试时,我使用Application.Current.Resources做了类似的事情。
您可以将Application.Current.Properties注册为服务上的财产。然后使用您的项目服务并在测试中模拟属性。
例如,如果您使用的是Microsoft Unity DI,则可以执行以下操作:
public interface IAppPropertyService { IDictionary< string, object> Properties { get; set; } }public class AppPropertyService : IAppPropertyService { public const string AppPropertiesName = "AppProperties"; public IDictionary< string, object> Properties { get; set; }public AppPropertyService([IocDepndancy(AppPropertiesName)] IDictionary< string, object> appProperties) { Properties = appProperties; } }

然后在你的应用程序中注册这样的服务:
Container.RegisterInstance< IDictionary< string, object> > (AppPropertyService.AppPropertiesName, Application.Current.Properties); Container.RegisterType< IAppPropertyService, AppPropertyService> ();

在你的测试中使用模拟版本的Application.Current.Properties,例如只是一个字典:
Container.RegisterInstance< IDictionary< string, object> > (AppPropertyService.AppPropertiesName, new Dictionary< string, object> ()); Container.RegisterType< IAppPropertyService, AppPropertyService> ();

【如何测试包含Application.Current.Properties.ContainsKey(“token”)的方法】只需确保在项目中使用PropertyService而不是Application.Current.Properties,如下所示:
public string RetrieveToken() { var propertyService = Container.Resolve< IAppPropertyService> (); if (propertyService.Properties.ContainsKey("token")) { return propertyService.Properties["token"] as string; } return null; }


    推荐阅读