我目前正在尝试运行一个单元测试,其中我需要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自动创建包含JsonDocument的类。
我想使用AutoFixture创建的类非常简单,除了JsonDocument之外,所有的属性都是简单类型。
public class Car
{
public string Name;
public int Age;
public JsonDocument GeneralCarInfo;
}发布于 2021-02-10 21:01:18
如果一个空的Json就足够了,你可以使用下面的AutoFixture customization
public class EmptyJsonDocumentCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<JsonDocument>(x =>
x.FromFactory(() =>
JsonDocument.Parse("{}")));
}
}如果不是,您可能需要序列化与您的场景相匹配的JSON。
发布于 2021-02-11 00:32:57
如果一个空的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。
https://stackoverflow.com/questions/66135995
复制相似问题