问题标签 [parameterized-unit-test]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1229 浏览

python - 使用夹具和命令行参数参数化 pytest 测试

尝试将命令行参数(table_name)带入 pytest(通过 conftest.py,见下文)并在辅助方法中使用该参数在数据库中进行查询,然后使用查询结果使用 @pytest 创建参数化测试输入.mark.parametrize 在 test_ 函数上。

问题是:命令行参数(table_name)正在使用夹具检索,我们想将其传递给辅助方法以进行查询并将查询结果放入列表中,但由于辅助方法采用夹具,它不能在另一个fixture/test_function之外调用。所以我们不能把列表放入参数化的 test_function params

有没有办法使用命令行参数并将数据库查询的结果传递给参数化标记/参数?

0 投票
1 回答
272 浏览

python-3.x - 如何参数化 xpath 并将其解析为文本?

我有一个 python 文件,Base.Py

还有另一个 python 文件 CreateNew.Py

我的问题是,而不是在 Base.Py 中硬编码为("//span[contains(text(),'Submit')]"). 如何将其解析为文本格式,以便我可以在 CreateNew.Py 中调用

0 投票
1 回答
1144 浏览

c# - 为参数化 MSTest 使用自定义类型

我正在创建单元测试,并且我想使用自定义类型(如 dto)创建参数化测试。

我想做这样的事情:

  1. 这是你能做的吗?我收到一条错误消息,上面写着“属性参数必须是常量表达式......”我想我在某处看到属性只能将原始类型作为参数?
  2. 这是错误的方法吗?我应该只传递属性并在测试中创建 dto 吗?
0 投票
1 回答
473 浏览

java - 可以通过@MethodSource(junit 5.1)传递多维数组吗?

我正在尝试将二维数组传递给参数化测试。一维数组按预期工作,但junit在第二个抱怨“错误解析索引0处的参数”。这是不支持还是我使用了错误的语法?

(junit 5.1.0)

0 投票
1 回答
390 浏览

unit-testing - SWI-Prolog - 单元测试库 plunit - forall 选项如何使用?

对于我的词法分析器(标记器),所有ASCII 7 位字符(0x00 到 0x7F)都有一个特定的标记。由于 SWI-Prolog支持 Unicode,字符代码从 0x0000 到 0xFFFF。

在我的词法分析器中,由于有许多字符不会映射到特定标记,因此存在未知标记 (tokUnknown)。

为了确保代码在 0 到 127(0x00 到 0x7F)之间的所有字符都没有 tokUnknown,需要测试用例。

测试用例需要一个简单的词法分析器将字符转换为标记。

这是代码为 0 的字符的测试用例。

以这种方式编写测试需要 128 个不同的测试来检查tokUnknown.

SWI-Prolog 单元测试库plunit有一个选项forall来生成数据。

根据文档,测试应如下所示:

是否可以使用该forall选项仅编写一个测试用例而不是为该测试系列编写 128 个单独的测试用例?

您可以使用 forall 给出测试用例的工作版本吗?


跟进

forall 的模板是forall(:Generator).

当我第一次看到这个时,我完全糊涂了,几乎走开了回去写大量的测试,但坚持它知道这对于进行参数化测试应该是多么有价值和容易,例如JUnit 5NUnit 3。然后可以使用参数化测试进行模糊测试,并且可以增强模糊测试以生成反例,例如QuickCheckFsCheck


示例 1

在硬编码测试中

我想Code为每个测试创建一个更改的变量。我也知道 的约束Code,即 0 到 127。

因此,对于这个简单的生成器,所需要的只是一个谓词,它在调用时生成从 0 到 127 的值并将它们作为变量返回,例如Code.

between/3满足要求,例如

通过查看答案可以看出,只需将谓词赋予forall,例如


示例 2

该测试是检查所有单独的空白字符或 ASCII 7 位字符的空白字符序列是否返回 astokWhitespace并且空白字符是令牌的字符串值。

带有空格标记的自定义不是在标记中包含字符,但在这里包含它们是因为如果需要更容易删除它们然后想知道为什么 OP 不这样做。因为这是为了学习,所以包括在内。

硬编码测试

在这个例子中,变量是String,例如"\t",令牌中的值tokWhitespace,例如"\t"

单个空白字符是:

从几十年来编写词法分析器/标记化测试中学到的一个教训是,每个单独的字符都需要进行测试。此外,测试不应以与 lexer/tokenizer 中的检查相同的方式生成值。在这种情况下,测试不应该依赖,code_type/2因为它在词法分析器/标记器中使用,并且如果code_type/2在某些地方如何获得错误,测试将无法检测到它。所以测试用例将通过不同的方式获取字符,在这个例子中它们来自一个列表。

从几十年的递归代码测试中学到的第二个教训是,测试需要测试至少三个级别的深度。在此示例中,空白字符的测试将测试最多三个字符的序列。

第三个教训是,将函数组合与组合、排列、类型构造函数和类型析构函数等函数结合使用可以减少编写测试数据生成器的组合爆炸;相反,它们有助于测试用例的组合爆炸。要在 Prolog 中做到这一点,需要将功能概念转换为 Prolog 谓词。

基于这些教训,需要一些辅助谓词。

示例用法:

为了保持阅读forall更简单,创建了一个辅助谓词。

现在在测试中简单地使用生成器forall

用这么少的代码创建并运行所有这些测试(每个点代表一个单独的测试用例)。


示例 3

此示例测试一个非确定性谓词,因此需要使用findall。这也有用于谓词的两个输入参数和两个输出参数。

findall/3 的签名是

使用两个值与finall/3不是Template一个元组,例如(A,B),而是一个列表,例如[A,B],并且Bag是一个列表的列表,例如[["1",1],["2",2]],列表中的每个项目都是结果,内部列表中的项目是相应Template参数的值。

本例测试variation_number/4

0 投票
1 回答
405 浏览

java-8 - 使用junit5运行参数化测试的异常

尝试将参数化测试与 Spring Boot 应用程序集成时出现 Junit Vintage 初始化错误。有关解决此问题的任何指示?

在此处输入图像描述

依赖项

0 投票
0 回答
1246 浏览

python - python 2.7中的子测试功能?

如何在 Python 2.7 中编写如下测试用例?我没有使用 Pytest/Python3 的选项。

总之,我正在寻找 Python 2.7 中“Pytest 中的参数化夹具”和“unittest 的子测试功能”的替代品。

我可以在 Python 2.7 中执行以下操作,但第一个失败的断言将退出测试。由于我的测试用例中只有一种方法,因此只有一个测试运行 - 尽管一个测试评估了许多断言。

如果我想分别测试每个断言,我将不得不将每个断言放在自己的方法中,这会很麻烦。

0 投票
1 回答
76 浏览

python - Python 2.6 Unittest 辅助参数和argparse,如何解决?

我正在尝试在 Python 2.6 上运行一个基本的单元测试,它接受带有 argparse 的参数。

我在我的环境中受到限制,无法安装任何其他库或使用任何模块进行测试,但单元测试。

但是我相信答案就在这里:

你如何为 python 模块的 argparse 部分编写测试?

但是,我无法用我的代码重构提供的主要答案。

在不重构我提供的示例代码的情况下,有人可以向我展示一下,并告诉我如何为下面的代码编写一个单元测试,它可以即时使用 -H 和 -S 吗?

提前致谢。

0 投票
1 回答
154 浏览

java - 为验证字符串输入编写参数化测试的最佳实践是什么?

我正在为类似于下面的代码编写参数化单元测试,以确保我的测试涵盖所有可能的输入情况并且系统按预期运行。

我想出了 3 种方法,即 testGetAnimalMood1、testGetAnimalMood2、testGetAnimalMood3:

通过使用 MethodSource,testGetAnimalMood2 看起来比 testGetAnimalMood1 更干净。然而,与此同时,比以前更难读取用于测试的值。认为 getAnimalMoodParameters2 方法没有增加多少价值,使用哪个版本更好?

testGetAnimalMood3 看起来更干净,但它有验证我的错误逻辑的潜在危险,因为它使用与代码下的测试类似的方法来获取值。此外,如果我不将值写为字符串,我可能无法捕捉到可能的拼写错误。但是一个反驳的论点是,另一个试图修改此代码的用户可能无法通过查看那些任意字符串来理解行为。

考虑所有这些论点,或者如果你必须添加更多,哪一个是最好的方法?

0 投票
0 回答
131 浏览

jestjs - 玩笑 test.each 在名称中具有对象属性

我有一个参数化测试:

但不是用 %o 打印整个对象,我想打印属性 MyObj.myProperty 的值

有谁知道这是否可能?