我有一個自定義的JsonConverter,它從前端獲取本地日期時間字符串,並使用NodaTime將其轉換爲DateTimeOffset
。如何在ASP.NET Web API中測試自定義的JsonConverter?
我替換了Json.NET中的默認解析器。
formatter.SerializerSettings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CustomResolver(),
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
所以在我的測試中,我需要確保我配置它。
內部發生的事情是POST請求發送到我的API控制器。如果ViewModel(用於API操作)包含DateTimeOffset
屬性,則關聯的JSON datetime屬性將通過轉換器。
當轉換器被觸發時,則應用程序首先獲取User.Identity
:
var user = (ClaimsIdentity) Thread.CurrentPrincipal.Identity;
成功時,我們提取Locality
權利要求,其中包含IANA時區ID(例如,「美國/紐約」)。
我們使用它將本地日期時間轉換爲相應的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模擬,我有我的身份模擬,但我如何得到它的工作?任何幫助是極大的讚賞。
這種有點東西驅使我設計我的網絡API控制器的堅果。他們使得它在教程中看起來非常簡單..然後,你做了真實世界的事情......而且你真的最終嘲笑整個Web管道......真是一團糟!我還有一個特殊的POCO,我爲此設計了一個JSON轉換,並由GlobalConfiguration註冊..唉! – bkwdesign