nunit - 使 NUnit3 在整个测试套件中最后运行指定的测试
问题描述
由 Specflow 生成并由 NUnit 运行的最后一个 E2E 测试将是一个恶意的测试,它将锁定用户一段时间。我希望这个测试在整个套件中最后运行。
我发现Order(int)
在 NUnit v3 中引入了属性,但这似乎不支持我想要的,因为我必须Order
向所有其他测试添加属性,因为:
带有 OrderAttribute 参数的测试在没有该属性的任何测试之前开始。
问题:这是否可以让 NUnit 在套件中最后运行指定的测试(项目中检测到的所有其他现有测试)?如果是,那么如何?
解决方案
首先,坏消息...
NUnit 中没有全局的测试顺序。允许您在
OrderAttribute
命名空间套件中的特定夹具或夹具中订购测试。即使在特定的包含套件中,也没有办法让测试最后运行,除非您在每个测试中添加 order 属性。
即使消除了前两个限制,排序也不能保证在测试开始之前早期的测试已经完成。如果测试是并行运行的,那么一旦有空闲线程运行它,最后一个测试就会启动。但是,我不清楚这对你来说是否有问题。
稍微好一点的消息是有几个解决方法。
您可以在运行OneTimeTearDown
结束时运行一个方法。为此,您需要SetUpFixture
在程序集中的任何已定义命名空间之外创建一个外部。在该夹具中的方法上放置一个[OneTimeTearDown]
属性,并将最终测试的测试代码放在那里。这样做的一个缺点是任何断言失败都不会报告为“失败”,而是报告为“错误”。但是,这对您来说可能无关紧要。
第二种更简洁的解决方法是将一个测试放在单独的程序集中。只有在第一个程序集运行后,才在 CI 脚本中运行该程序集。您还可以在 nunit3-console 的命令行中包含这两个程序集。如果您指定--agents=1
这两个组装过程将按命令行上列出的顺序依次运行。
推荐阅读
- python - 将数据帧字典转换为 Pandas MultiIndex 数据帧
- python - Neovim 代码编辑器中用于 Python 语言的自动文档字符串生成器插件
- regex - PR 命名约定的正则表达式
- reactjs - 使用 nextjs 'catch all' 路由获取数据
- php - Laravel API - 传递给 TokenGuard::__construct() 的参数 1 必须实现接口 UserProvider
- powerbi - 在 Power BI 中按列分组,然后对组表求和
- servicestack - ServiceStack PocoDynamo C# 查询嵌套对象属性
- python - 找到二维数组中的最大值
- ios - 如何使用 coremltools 4.0 更改 MLMultiArray 数据类型?
- google-sheets - 根据谷歌表格中的背景颜色更改单元格值