C# 在Nancy中测试RESTAPI
我试图断言来自Nancy端点的Json响应是徒劳的 以下是正在测试的模块:C# 在Nancy中测试RESTAPI,c#,automated-tests,nancy,C#,Automated Tests,Nancy,我试图断言来自Nancy端点的Json响应是徒劳的 以下是正在测试的模块: public MyModule() { Get["/mypath", true] = async (parameters, ct) => { ... return something.ToDictionary(x => x.Key, x => x.Value); }; } 如何编写
public MyModule()
{
Get["/mypath", true] = async (parameters, ct) =>
{
...
return something.ToDictionary(x => x.Key, x => x.Value);
};
}
如何编写测试来验证响应中字典的内容
我尝试过各种方法,例如:
var bootstrapper = new MyBootstrapper();
var browser = new Browser(bootstrapper);
var result = browser.Get("/mypath",
with =>
{
with.Accept(new MediaRange("application/json"));
});
Assert.AreEqual(HttpStatusCode.OK, result.StatusCode, "Body: " + Encoding.UTF8.GetString(result.Body.ToArray()));
Assert.That(result.GetModel<IDictionary<string, string>>()[SOME_KEY], Is.EqualTo("expected value"));
var bootstrapper=new MyBootstrapper();
var browser=新浏览器(引导程序);
var result=browser.Get(“/mypath”,
with=>
{
with.Accept(新的MediaRange(“application/json”);
});
AreEqual(HttpStatusCode.OK,result.StatusCode,Body:+Encoding.UTF8.GetString(result.Body.ToArray());
Assert.That(result.GetModel()[SOME_KEY]是.EqualTo(“期望值”);
我尝试过使用和不使用hte MediaRange,并试图了解在响应中可以在哪里找到词典,但似乎在任何地方都找不到<代码>结果。GetModel似乎根本不包含结果字典
我能够看到结果的唯一方法是通过查看Encoding.UTF8.GetString(result.Body.ToArray())
。这给出了原始JSON。然而:
字典在响应体中。您可以使用Nancy.Testing framework中的特殊方法将正文反序列化为特定格式,例如
反序列化JSON
:
// Replace dictionary type parameters with yours
var actualValue = result.Body.DeserializeJson<Dictionary<object, object>>();
//将字典类型参数替换为您的
var actualValue=result.Body.DeserializeJson();
有关NancyFx测试的更多详细信息,请访问Marcus Hammarbergs的博客:。词典已在回复正文中。您可以使用Nancy.Testing framework中的特殊方法将正文反序列化为特定格式,例如
反序列化JSON
:
// Replace dictionary type parameters with yours
var actualValue = result.Body.DeserializeJson<Dictionary<object, object>>();
//将字典类型参数替换为您的
var actualValue=result.Body.DeserializeJson();
有关NancyFx测试的更多详细信息,请访问Marcus Hammarbergs博客:。谢谢,我稍后会查看!GetModel和DeserializeJson扩展方法之间有什么区别?谢谢,我稍后再看!GetModel和反序列化JSON扩展方法之间有什么区别?