
我替换了Json.NET中的默认解析器.
formatter.SerializerSettings = new JsonSerializerSettings { Formatting = Formatting.Indented,ContractResolver = new Customresolver(),ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; 所以在我的测试中我需要确保配置它.
引擎盖下发生的事情是向我的API控制器发出POST请求.如果viewmodel(在API *** 作中使用)包含DateTimeOffset属性,则关联的JsON datetime属性将通过转换器.
当触发转换器时,应用程序首先获取User.IDentity:
var user = (ClaimsIDentity) Thread.CurrentPrincipal.IDentity;
成功后,我们提取地点声明,其中包含IANA时区ID(例如“America / New_York”).
我们使用它将本地日期时间转换为相应的DateTimeOffset.
这是我想测试的.
我有JsON对象:
nameValueCollection nameValueCollection = new nameValueCollection() { {"dateCreated","2015-11-30T14:22:00+1:00"},{"message","Some message."},{"timelinePostID","1"},{"applicationUser",""},{"thumbs","" } }; 但我坚持如何执行 –
// Arrange// Act// Assert
我找到了这个MockHelper类,所以我准备好了.
public static httpContextBase FakehttpContext(httpVerbs verbs,nameValueCollection nameValueCollection){ var httpContext = new Mock<httpContextBase>(); var user = new ApplicationUser { ID = "abc",TimezoneID = "America/New_York" }; var request = new Mock<httpRequestBase>(); request.Setup(c => c.Form).Returns(nameValueCollection); request.Setup(c => c.queryString).Returns(nameValueCollection); request.Setup(c => c.RequestType).Returns(verbs.ToString().toupper()); var response = new Mock<httpResponseBase>(); var session = new Mock<httpSessionStateBase>(); var server = new Mock<httpServerUtilityBase>(); httpContext.Setup(c => c.Request).Returns(request.Object); var u = verbs.ToString().toupper(); httpContext.Setup(c => c.Response).Returns(response.Object); httpContext.Setup(c => c.Server).Returns(server.Object); httpContext.Setup(c => c.User.IDentity.GetUserID()).Returns("abc"); httpContext.Setup(c => c.User.ApplicationUser()).Returns(user); return httpContext.Object;} 所以我有我的JsON模拟,我有我的身份模拟,但我怎么让它工作?任何帮助是极大的赞赏.
解决方法 这是一种不需要模拟整个httpContext的方法.在JsonConverter类中,将ReadJson中的逻辑重构为一个单独的方法,传入IDentity对象:
public overrIDe object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer){ return DeserializeDate(reader,objectType,existingValue,serializer,(ClaimsIDentity)Thread.CurrentPrincipal.IDentity);}public object DeserializeDate(JsonReader reader,JsonSerializer serializer,ClaimsIDentity IDentity){ // do stuff...} 然后针对DeserializeDate编写单元测试.
总结以上是内存溢出为你收集整理的c# – 如何在ASP.NET Web API中单元测试自定义JsonConverter?全部内容,希望文章能够帮你解决c# – 如何在ASP.NET Web API中单元测试自定义JsonConverter?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)