Autofixture 声明性自动数据参数属性的集合大小

2024-04-01

如何使用 Autofixture 的声明性参数样式传递到测试的属性上的属性来指定列表/枚举的长度/大小?

我希望能够在不将参数移入测试主体的情况下使该测试通过。

        [Theory, AutoData]
        public void CollectionSizeTest(
            List<int> defaultSize,
            List<int> customSize,
            List<int> customSize2,
            IEnumerable<string> empty
        )
        {
            Assert.Equal(3, defaultSize.Count);
            Assert.Equal(5, customSize.Count);
            Assert.Equal(6, customSize2.Count);
            Assert.Empty(empty);
        }

您可以为此创建一个自定义属性,例如CollectionSizeAttribute:

        [Theory, AutoData]
        public void CollectionSizeTest(
            List<int> defaultSize,
            [CollectionSize(5)] List<int> customSize,
            [CollectionSize(6)] List<int> customSize2,
            [CollectionSize(0)] IEnumerable<string> empty,
            List<string> defaultSize2
        )
        {
            Assert.Equal(3, defaultSize.Count);
            Assert.Equal(5, customSize.Count);
            Assert.Equal(6, customSize2.Count);
            Assert.Empty(empty);
            Assert.Equal(3, defaultSize2.Count);
        }

        public class CollectionSizeAttribute : CustomizeAttribute
        {
            private readonly int _size;

            public CollectionSizeAttribute(int size)
            {
                _size = size;
            }

            public override ICustomization GetCustomization(ParameterInfo parameter)
            {
                if (parameter == null) throw new ArgumentNullException(nameof(parameter));

                var objectType = parameter.ParameterType.GetGenericArguments()[0];

                var isTypeCompatible =
                    parameter.ParameterType.IsGenericType
                    && parameter.ParameterType.GetGenericTypeDefinition().MakeGenericType(objectType).IsAssignableFrom(typeof(List<>).MakeGenericType(objectType))
                ;
                if (!isTypeCompatible)
                {
                    throw new InvalidOperationException($"{nameof(CollectionSizeAttribute)} specified for type incompatible with List: {parameter.ParameterType} {parameter.Name}");
                }

                var customizationType = typeof(CollectionSizeCustomization<>).MakeGenericType(objectType);
                return (ICustomization) Activator.CreateInstance(customizationType, parameter, _size);
            }

            public class CollectionSizeCustomization<T> : ICustomization
            {
                private readonly ParameterInfo _parameter;
                private readonly int _repeatCount;

                public CollectionSizeCustomization(ParameterInfo parameter, int repeatCount)
                {
                    _parameter = parameter;
                    _repeatCount = repeatCount;
                }

                public void Customize(IFixture fixture)
                {
                    fixture.Customizations.Add(new FilteringSpecimenBuilder(
                        new FixedBuilder(fixture.CreateMany<T>(_repeatCount).ToList()),
                        new EqualRequestSpecification(_parameter)
                    ));
                }
            }
        }

这会导致通过调用将参数创建为具有给定大小的列表fixture.CreateMany<T>(_repeatCount).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Autofixture 声明性自动数据参数属性的集合大小 的相关文章

  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 在 Linux 上以编程方式为 gdb 在 C 或 C++ 代码中设置断点

    如何以编程方式在 C 或 C 代码中设置适用于 Linux 上的 gdb 的断点 I e int main int argc char argv set breakpoint here int a 3 a In gdb gt print a
  • Mac 上 OpenGL 中的多线程视频渲染显示严重的闪烁问题

    我有一个视频播放器应用程序 并使用多个线程以保持用户交互仍然流畅 解码视频的线程最初只是将生成的帧作为 BGRA 写入 RAM 缓冲区 该缓冲区由 glTexSubImage2D 上传到 VRAM 对于普通视频来说效果足够好 但正如预期的那
  • 将 gtest 与 xcode 结合使用

    我正在尝试在我的计算机上设置一个 C 单元测试库 并认为 google 的 gtest 会很合适 我目前正在使用最新版本的 xcode 运行 mountain lion 我一直在尝试按照发现的说明进行操作here http code goo
  • iOS 13 SwiftUI:应用程序在真实设备上启动时崩溃

    在 SwiftUI 和 Apple 的新测试版 macOS 10 15 iOS 13 和 Xcode 11 发布后 我开始开发基于新技术的应用程序 考虑到所有涉及的软件和系统都处于测试阶段 开发进展顺利 然而 当尝试在真实设备 iPhone
  • 使用 System.Text.Json 反序列化匿名类型

    我正在更新 NET Core 3 x 的一些应用程序 作为其中的一部分 我正在尝试从Json NET到新的System Text Json类 使用 Json NET 我可以反序列化匿名类型 如下所示 var token JsonConver
  • 优化三角矩阵计算的 CUDA 内核的执行

    我正在开发我的第一个 Cuda 应用程序 并且我的内核 吞吐量低于预期 这似乎是目前最大的瓶颈 内核的任务是计算一个 N N 大小的矩阵 DD 包含数据矩阵上所有元素之间的平方距离 数据矩阵 Y 的大小为 N D 以支持多维数据 并存储为行
  • Java:检测图像格式、调整大小(缩放)并另存为 JPEG

    这是我的代码 它实际上有效 虽然不完美 但确实有效 问题是调整大小的缩略图没有粘贴在白色绘制的矩形上 破坏了图像的长宽比 这是代码 有人可以建议我修复吗为了它 好吗 谢谢 import java awt Color import java
  • Selenium2 + phpunit -> 拖放到 xpath 上

    我使用 PHPUnit Extensions Selenium2TestCase Selenium 和 phpunit 我需要在不同的 emelent 上拖放一个 xpath 元素 就像在此屏幕上一样 更改树 类别树 上的位置 srcDra
  • 使用 malloc() 和 sizeof() 在堆上创建结构体

    我正在尝试使用 malloc 和 sizeof 在堆上创建一个结构 这是我的代码 include
  • 在 C# 中使用 imagemagick.net 在图像上应用水印

    我正在使用以下代码来调整图像大小 现在 我需要使用此图像应用水印魔法网 https magick codeplex com var response client GetObject request ResponseStream Magic
  • OpenSSL HMAC-SHA1 摘要与加密的不匹配

    我花了过去 6 个小时来实现消息签名算法 它根本不起作用 这是生成摘要的 PHP 代码 payload thisisanapple signature hash hmac sha1 payload thisisarandomkey data
  • Eclipse 中的 SSL 密钥库路径

    在我的用户主目录中有一个 keystore文件 每当我这样做时keytool list I get Keystore type JKS Keystore provider SUN Your keystore contains 0 entri
  • 循环中的动作链仅工作一次(Selenium/Python)

    I m trying to implement a cookie clicker bot Cookie clicker it s just a stupid simple game where you can click on the co
  • 实体框架和 SQL Server 2012 分页

    SQL Server 2012 引入了一种使用 FETCH 和 OFFSET 的更有效的分页机制 这可能会对使用大量分页的应用程序的性能产生重大影响 实体框架 5 支持吗 因此 如果我使用 EF 通过 Take Skip 进行分页 如果 E
  • 检查来自 Alamofire 和 Swift 的多个异步响应

    我正在编写一个应用程序 该应用程序依赖于来自各个站点 服务的数据 并涉及根据来自这些不同来源的数据执行计算以生成最终产品 我编写了一个示例类 其中包含下面的两个函数 用于从两个来源收集数据 我选择使函数不同 因为有时我们根据源应用不同的身份
  • 可折叠树示例中的 d3.js v4 古怪链接转换

    如果您玩下面的可折叠树 您会发现当您到达树的末尾并展开和折叠节点时 这些线正在做一些古怪的事情 我不完全确定是什么驱动了这种行为 或者我的重写是否的在此输入链接描述 https bl ocks org mbostock 4339083完全没
  • 车把示例不起作用

    在我的节点服务器提供的 hbs 中 在我的客户端 JavaScript 文件中 var source entry template html var template Handlebars compi
  • SQLAlchemy 中的信号或触发器

    SQLAlchemy 是否有类似于 Django 信号概念的东西 基本上 我想在预保存或后保存某些实体对象时触发一些函数 谢谢 编辑 我只是想要 SQLAlchemy 中的 django signals 的等效项 我认为您正在寻找 ORM
  • 错误 3219 - 无效操作

    我尝试在 Access 项目中编写查询 但在 SQL 查询所在的行中发生此运行时错误 这是我的代码 Private Sub Befehl80 Click Dim rst As DAO Recordset Set rst CurrentDb
  • Autofixture 声明性自动数据参数属性的集合大小

    如何使用 Autofixture 的声明性参数样式传递到测试的属性上的属性来指定列表 枚举的长度 大小 我希望能够在不将参数移入测试主体的情况下使该测试通过 Theory AutoData public void CollectionSiz