AutoFixture 生成 JsonDocument?

AutoFixture generate an JsonDocument?

我目前正在尝试 运行 单元测试,我需要 AutoFixture 来生成 JsonDocument 属性.

但这不可能,因为

 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 自动创建一个 class,其中包含 JsonDocument.

我想用AutoFixture创建的class很简单,除了JsonDocument.

之外,所有属性都是简单类型
public class Car 
{
   public string Name;
   public int Age;
   public JsonDocument GeneralCarInfo;
}

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

public class EmptyJsonDocumentCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.Customize<JsonDocument>(x =>
            x.FromFactory(() =>
                JsonDocument.Parse("{}")));
    }
}

如果没有,您可能需要序列化 ​​JSON 以符合您的场景。

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

如果您想要一个填充模型,您将必须自定义 AutoFixture,以便它知道如何将数据传送到您的 JsonDocument。如果您还没有 GeneralCarInfo 模型,您可以在测试项目中创建一个模型并自定义它,使其类似于您希望在 SUT 中拥有的数据。然后,您可以自定义原始 Car 模型以接收 GeneralCarInfo.

的序列化实例
fixture.Customize<Car>(
    c => c.With(
        x => x.GeneralCarInfo,
        (CarInfo ci) => JsonDocument.Parse(JsonSerializer.Serialize(ci))));

查看完整示例 here