C# 在Nancy中测试RESTAPI

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); }; } 如何编写

我试图断言来自Nancy端点的Json响应是徒劳的

以下是正在测试的模块:

    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。然而:

  • 手动解码字节数组很难看
  • 我更喜欢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扩展方法之间有什么区别?