君不见长松卧壑困风霜,时来屹立扶明堂。这篇文章主要讲述如何测试包含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;
}
推荐阅读
- Android Google+登录问题
- 如何从客户端(android-java app)发送数据到解析服务器,处理它,将其保存在parse-dashboard中并将结果发送给客户端()
- Parse-platform使用Android加入
- DEP0001(意外错误:-2147024809 CordovaApp Windows10)
- 每部Android手机都支持SHA-256吗()
- Android中的线程或服务中的蓝牙通信()
- 与前台服务android通信
- Android(后台服务总是关闭)
- Highmaps mappies with drilldown