首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoFixture会生成JsonDocument吗?

AutoFixture会生成JsonDocument吗?
EN

Stack Overflow用户
提问于 2021-02-10 19:29:09
回答 2查看 195关注 0票数 0

我目前正在尝试运行一个单元测试,其中我需要AutoFixture来生成一个JsonDocument属性。

但这是不可能的,因为

代码语言:javascript
复制
 AutoFixture.ObjectCreationExceptionWithPath : AutoFixture was unable to create an instance from System.Text.Json.Utf8JsonReader&, most likely because it has no public constructor, is an abstract or non-public type.

如何使用AutoFixture自动创建包含JsonDocument的类。

我想使用AutoFixture创建的类非常简单,除了JsonDocument之外,所有的属性都是简单类型。

代码语言:javascript
复制
public class Car 
{
   public string Name;
   public int Age;
   public JsonDocument GeneralCarInfo;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-10 21:01:18

如果一个空的Json就足够了,你可以使用下面的AutoFixture customization

代码语言:javascript
复制
public class EmptyJsonDocumentCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.Customize<JsonDocument>(x =>
            x.FromFactory(() =>
                JsonDocument.Parse("{}")));
    }
}

如果不是,您可能需要序列化与您的场景相匹配的JSON。

票数 1
EN

Stack Overflow用户

发布于 2021-02-11 00:32:57

如果一个空的JsonDocument就足够了,我相信Serhii提出的解决方案已经足够好了。

如果你想要一个填充模型,你必须定制AutoFixture,这样它才能知道如何将数据传递到你的JsonDocument中。如果您还没有GeneralCarInfo模型,您可以在测试项目中创建一个,并对其进行定制,使其类似于您期望在SUT中包含的数据。然后,您可以自定义原始Car模型以接收GeneralCarInfo的序列化实例。

代码语言:javascript
复制
fixture.Customize<Car>(
    c => c.With(
        x => x.GeneralCarInfo,
        (CarInfo ci) => JsonDocument.Parse(JsonSerializer.Serialize(ci))));

请参阅完整的示例here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66135995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档