gpt4 book ai didi

c# - NancyFx 测试返回无效的 Json

转载 作者:行者123 更新时间:2023-11-30 16:57:39 26 4
gpt4 key购买 nike

我们使用 NancyFx 来托管单页应用程序和多个 ReST 端点。代码和测试使用相同的 Bootstrap ,唯一的区别是在测试中我们使用测试框架中的 Nancy Browser。

如果我从网站返回一个简单的对象,一切都会通过应用程序或测试框架按预期工作。然而,真正的问题是我们返回的对象包含一些动态数据,尽管它本身不是动态对象。该应用程序运行良好,但测试失败,因为 JSON 无效、字符串缺少引号且日期格式不正确。

var browser = new Browser(bootstrapper);
_response = browser.Get("http://localhost/...", with =>
{
with.HttpRequest();
with.Header("Accept", "application/json");
});

var bstr = _response.Body.AsString();

我在测试时将方法附加到管道 AfterRequest 方法,通过查看 NancyContext 上的 Response 属性,我可以看到 JSON 字符串看起来不错,但是一旦我们从浏览器获取响应对象并将其转换为一个字符串,它不再是有效的 JSON。

protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.AfterRequest += Foo;
}

private void Foo(NancyContext obj)
{
//Can see the Response on the NancyContext here
}

如果我无法解决这个问题,我会考虑放弃 Nancy 测试框架,并在测试环境中自行托管。

编辑

我使用 NancySelfHost 得到了类似的结果。使用自托管或测试浏览器时,它似乎没有选择 Json.Net 序列化程序。我使用的是在 Tiny IoC 中注册自定义序列化程序的标准设置 https://github.com/NancyFx/Nancy.Serialization.JsonNet .

public class CustomJsonSerializer : JsonSerializer
{
public CustomJsonSerializer()
{
this.ContractResolver = new CamelCasePropertyNamesContractResolver();
this.Formatting = Formatting.Indented;
}
}

public class Bootstrapper : DefaultNancyBootstrapper
{
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);

container.Register(typeof(JsonSerializer), typeof(CustomJsonSerializer));
}
}

最佳答案

我在使用 ObjectId 结构 (MongoDB) 时遇到了类似的问题,它被序列化为不带引号的 JSON。尝试将默认的 Nancy 序列化程序更改为 Json.NET:

https://github.com/NancyFx/Nancy.Serialization.JsonNet

它为我解决了这个问题。

关于c# - NancyFx 测试返回无效的 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26164844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com