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。
我目前正在尝试 运行 单元测试,我需要 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。