微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AutoFixture 生成一个 JsonDocument?

如何解决AutoFixture 生成一个 JsonDocument?

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

但这是不可能的,因为

JsonDocument

如何使用 AutoFixture 自动创建包含 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

JsonDocument

解决方法

如果空的 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?