问题标签 [parametrized-testing]

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 投票
2 回答
586 浏览

python - 在 Python 中动态参数化多个测试

我正在尝试使用 Pytest 编写动态测试套件,其中测试数据保存在单独的文件中,例如 YAML 文件或 .csv。我想运行多个测试,所有这些测试都是从同一个文件中参数化的。假设我有一个测试文件test_foo.py,如下所示:

使用参数化装饰器,我可以在 pytest 中运行多个测试,并且可以按预期工作:

但我想动态参数化这些测试。我的意思是,我想将所有测试的测试数据写在一个单独的文件中,这样当我运行 pytest 时,它将把我写的所有测试数据应用到每个测试函数中。假设我有一个看起来像这样的 YAML 文件:

然后我想读取这个 YAML 文件并使用这些数据来参数化我的测试文件中的所有测试函数。

我知道这个pytest_generate_tests钩子,我一直在尝试使用它来动态加载测试。我尝试将之前传递给parametrize装饰器的相同参数和数据值添加到metafunc.parametrize钩子中:

但是,这不起作用,因为 pytest 尝试将测试数据应用于每个函数:

我想知道的是:如何使用 pytest动态参数化多个测试?我已经使用 pdb 对 pytest 进行了自省,据我所知,我metafunc只知道您在文件中定义的第一个测试。在我上面的例子中,test_addnums首先定义,所以当我vars(metafunc)在 pdb 调试器中打印时,它会显示这些值:

但是如果我切换test_foobarandtest_addnums函数,并颠倒parametrize调用的顺序,它会显示关于的信息test_foobar

所以看起来 metafunc 实际上并没有在我的测试文件中存储关于每个测试函数的信息。因此我不能使用fixturenamesorfunction属性,因为它们只适用于一个特定的功能,而不是全部。

如果是这种情况,那么我如何访问所有其他测试功能并单独参数化它们?

0 投票
0 回答
32 浏览

java - JUnit 参数化测试随机失败

我有以下参数化测试

它在单独运行时有效,但在我与其他测试一起运行时一直失败。我发现第三个字符串正在评估为以下字符串

我改变了它,但它仍然失败。我正在使用 Eclipse,并且棋盘(它是来自 Web 的国际象棋游戏,我正在尝试重构)以这种格式显示。

0 投票
0 回答
56 浏览

python - 如何更改 pytest 类中参数化堆叠的顺序?

我有一个测试类,它有一个参数化类和其中的一些测试,每个测试都有自己的参数化方法。我希望该类使用一个类参数在其中运行所有测试,并且只有在所有测试完成后,才使用第二个参数再次运行测试。例如:代码是这样的:

现在它使用如下参数:

我希望它使用这样的参数:

有什么办法可以做到这一点?

0 投票
0 回答
500 浏览

python - pytest - 得到空参数集

我正在尝试自动化 api,基本上我想做的是执行 test_001_post_desafio,将其响应中的信息保存在列表中并在 test_002_post_validate 中使用它,但是当使用 pytest 执行后者时出现错误:“SKIPPED [1] test_email .py:43: 得到空参数集 ['otp', 'idOtp', 'subdomain']"

我究竟做错了什么?

我可以在测试用例中完成整个测试,但我认为它不是很优雅

0 投票
2 回答
465 浏览

java - JUnit 5 @ParamterizedTest {arguments} 与 {argumentsWithNames} 占位符

我正在使用 JUnit 5.7.0、IntellijIDEA 2021.1.2 CE、MacOS Catalina 10.15。并且不明白 和 之间的 ParameterizedTest.ARGUMENTS_PLACEHOLDER区别ParameterizedTest.ARGUMENTS_WITH_NAMES_PLACEHOLDER

根据 javadocARGUMENTS_WITH_NAMES_PLACEHOLDER处理命名参数,而ARGUMENTS_PLACEHOLDER只处理参数。两个测试在 IDEA 中的测试结果看起来是一样的:

在此处输入图像描述

谁能提供这两个占位符行为不同的示例?

0 投票
1 回答
90 浏览

c++ - GTest 参数化测试从数组或类似文件中解包 Values 参数

使用 GTest 进行简单的参数化测试,例如:


如果我想从数组中生成值,例如:


然后使用该数组作为参数::testing::Values(...),例如:

如何将数组解包成多个参数呢?


编辑:

我已经达到了定义模板函数的部分解决方案

然后像这样使用它:

但是第二个参数 ,std::make_index_sequence<2>{}并不是很优雅。template无论如何,用另一个来提供第二个参数是可能的吗?

0 投票
1 回答
46 浏览

pytest - pytest mock patch side_effect 与 pytest.mark.parametrize 一起使用时不会迭代

我有以下 pytest 脚本,并且该side_effect[2, 6]没有被迭代。它总是卡2在 test 函数test_my_function中。

我的问题是:

如何使值与函数中的测试用例side_effect一起迭代。(假设我们必须使用)。parametrizetest_my_functionparametrize

0 投票
0 回答
24 浏览

java - 如何将@ParametrizedTest String var 评估为表达式

这是 Junit5 反复出现的挑战@ParametrizedTest......

我想将以下表达式(显然是一个字符串)传递给我的断言,但是字符串参数expectedTemplate保持为一个字符串,并且它不像我在 Bash 中所期望的那样“扩展”(执行)......很难制定我希望从这段代码中实现的目标会更清晰:

请注意

  • Constants是一个持有常量值的类,主要由 JUnit 测试使用。
  • tesSupport是一个内部帮助器工厂类,它从提供的 JSON 文件构造给定对象。

运行测试时失败:

因为常量GENERIC_TEMPLATEin的值Constants不是作为表达式处理:Constants.GENERIC_TEMPLATE而是保持为 String :-(

0 投票
0 回答
54 浏览

testing - 在 Before 方法中参数化的 JUnit 稍后执行并抛出 ParameterResolutionException

我有一个测试类,它由带有一些参数的 @Before 方法和其他测试方法组成。

但它一直先执行 abc() 并抛出错误

我对 JUnit 参数很陌生。Before 方法可以同时是 ParametrizedTest 吗?如果没有此注释 [ParametrizedTests],它似乎无法按预期工作,但另一方面,我需要在所有其他方法之前执行它。可能是什么问题以及解决方案是什么?

0 投票
0 回答
119 浏览

c++ - Boost测试治具参数

我想使用 boost::test 编写一个参数化的单元测试。最好我想将参数传递给我的夹具类。我用相同的设置和拆卸场景编写了多个测试用例,所以它会非常方便。不幸的是,我知道 boost::test 框架假设夹具类有一个零构造函数。所以我看不到任何方法可以在夹具类中传递测试参数。

你知道我怎样才能正确设计我的测试吗?

BOOST_DATA_TEST_CASE_F我唯一的猜测是在测试体内使用和调用一些辅助方法。或多或少是这样的:

但是,我不喜欢在set_up每次测试开始时添加方法的想法。也许在提升中,有一些隐藏的功能可以在这种情况下重复使用?