如何在 JUnit 5 中参数化 beforeEach()?

2024-02-15

我使用 JUnit 5 作为我的测试运行程序。

在设置方法中,我硬编码了 3 个参数(platformName, platformVersion, and deviceName)。我有一个测试方法,应该测试各种组合...这意味着,当运行我的testLogin()测试,它应该在多个平台名称、版本、设备名称上运行...

所以,我尝试如下......

@BeforeEach
@CsvSource({"IOS,13.0,iPhone X Simulator", "IOS,13.2,iPhone Simulator", "IOS,13.3,iPhone XS Simulator"})
void setUp(String platformName, String platformVersion, String deviceName) throws MalformedURLException {
    ....
    capabilities.setCapability("platformName", platformName);
    capabilities.setCapability("platformVersion", platformVersion);
    capabilities.setCapability("deviceName", deviceName);
    capabilities.setCapability("methodName", testInfo.getDisplayName());
}

我的问题是,怎样才能beforeEach()方法可以参数化吗?另外,我想获取测试方法名称...所以,如果我指定参数,那么我应该在哪里指定 TestInfo 参数。

请帮我。我也看到了下面的问题...

JUnit 5 中的参数化 beforeEach/beforeAll https://stackoverflow.com/questions/51678584/parameterized-beforeeach-beforeall-in-junit-5

========

public class TestBase {

    @BeforeEach
    void setUp(TestInfo testInfo) throws MalformedURLException {
        MutableCapabilities capabilities = new MutableCapabilities();
        capabilities.setCapability("platformName", "iOS");
        capabilities.setCapability("platformVersion", "13.2");
        capabilities.setCapability("deviceName", "iPhone Simulator");
        capabilities.setCapability("name", testInfo.getDisplayName());
        capabilities.setCapability("app", “/home/my-user/testapp.zip");

        driver = new IOSDriver(
                new URL("https://192.168.1.4:5566/wd/hub"),
                capabilities
        );
    }
}
public class LoginTest extends TestBase {

    @Test
    public void testLogin() {
        driver.findElement(By.id("user-name")).sendKeys(“myuser);
        driver.findElement(By.id("password")).sendKeys(“mypassword);
        driver.findElement(By.id(“login_btn”)).click();
        assertTrue(true);
    }
}

你无法参数化@BeforEach方法。 JUnit5 仅支持参数化测试(测试方法)。

参数化测试的声明方式与常规测试一样@Test方法,但使用@ParameterizedTest改为注释。此外,您必须声明至少一个来源(例如@CsvSource, @ValueSource, etc.)

例如:

    @ParameterizedTest
    @CsvSource({
        "apple,         1",
        "banana,        2",
        "'lemon, lime', 0xF1"
    })
    void testWithCsvSource(String fruit, int rank) {
        assertNotNull(fruit);
        assertNotEquals(0, rank);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JUnit 5 中参数化 beforeEach()? 的相关文章

随机推荐

  • 使用 C# 并行下载多个文件

    我想使用 C 并行下载文件 为此 我编写了这段代码 该代码运行良好 但问题是 UI 冻结了 using System using System Collections Generic using System IO using System
  • Android Loopj Async Http 在 1.4.5 更新后崩溃

    Android Loopj Async Http lib 的新更新已发布 并且发生了很大变化 现在需要手动设置Looper prepare 否则默认使用同步模式而不是异步模式 我不明白我需要设置它的地方 Logcat 07 09 08 16
  • 如何重新运行 Apache Airflow 中所有失败的任务?

    我有一个包含数万个任务的 Apache Airflow DAG 运行后发现其中少数任务失败了 我修复了导致某些任务失败的错误 并且我想重新运行仅失败的任务 这SO帖子建议使用 GUI 来 清除 失败的任务 如何在 Airflow 上重新启动
  • Express app.set 与 app.use

    我意识到这可能是一个相当菜鸟的问题 并且有大量关于这件事的文章 但我很难找到对我来说清楚且有意义的解释 我在stackoverflow也没有找到这个问题 我的问题很简单 在express中 app set和app use之间有什么区别 我的
  • Crystal Reports - 值不能为空。参数名称:窗口

    我最近在尝试通过对话框将水晶报表表单加载到我的 WPF 应用程序中时遇到了一个不寻常的错误 该报表将显示为加载几秒钟 然后抛出一个错误 指出 值不能为空 参数名称 窗口 这让我很困惑 据我所知 水晶报表不使用名为 window 的参数 这是
  • Django 中的请求工厂中没有数据的 POST

    我正在将 django 应用程序从 1 x 移动到 2 2 运行单元测试时 出现有关将 None 作为数据发布的错误 以前的版本允许发None吗 有没有办法通过 RequestFactory 发布 None 我不想给出空字符串 因为需要验证
  • 使用两个字段的 Elasticsearch 日期范围查询

    我正在存储具有两个字段的文档 startDate 和 endDate 我想使用输入日期运行弹性查询并返回 startDate 和 endDate 包含该日期的所有文档 例如 doc1 source startDate 2015 01 01
  • 开窗器焦点,或活动

    我想在新选项卡中打开一个窗口 但是当我希望该开启页面处于活动状态 而不是新页面时 我该怎么做 非常感谢 我的代码是这样的 要将焦点集中到新窗口 但您不希望这样 并且默认情况下它可能会具有焦点 var newWindow window ope
  • 在数据框中应用函数时,dim(X) 必须具有正长度

    我正在尝试将此函数应用于数据框列 best recom lt function x n 1 y lt result2 x order result2 x n inds which result2 x y arr ind TRUE recom
  • 在 div 中垂直和水平居中文本

    我有一个 div 其中包含覆盖有文本的图形背景 我想使这个元素水平和垂直居中 但我无法让文本垂直居中 到目前为止 我有以下代码 div div img src buttonbackground png class stretch alt d
  • Visual Studio 2013 - Git - 获取远程分支

    我开始使用 Visual Studio 2013 和 Visual Studio Online 的内置 Git Team Explorer 工具 我非常熟悉如何通过 Git Shell 执行此操作 但似乎不知道如何通过 VS 2013 界面
  • 如何停止/退出 AWS Glue 作业 (PySpark)?

    我成功运行了一个 AWS Glue 作业 可以转换数据以进行预测 如果达到特定条件 我想停止处理并输出状态消息 正在运行 if specific condition is None s3 put object Body json str B
  • 应用程序被终止时是否可以收到 FCM 推送通知?

    我正在开发一个电子邮件应用程序 我希望用户在收到新电子邮件后立即收到推送通知 为此 我使用 FCM 我刚刚通过以下链接尝试使用 FCM 推送通知 为了测试 FCM 提供哪些功能 但我面临的问题是 当应用程序位于前台或后台时 设备会收到推送通
  • 为什么值类型创建在堆栈上而引用类型创建在堆上?

    编程语言书籍通常解释说 值类型是在堆栈上创建的 而引用类型是在堆上创建的 我的问题是为什么 我的问题是为什么 他们为什么要 解释 这一点 因为有时作者自己也不太了解 有时他们又懒得正确解释 事实却相当复杂 幸运的是 埃里克 利珀特 Eric
  • 使用 std::string 保存二进制数据以避免手动动态内存管理是否有效

    注意base64 decode in http www adp gmbh ch cpp common base64 html http www adp gmbh ch cpp common base64 html std string ba
  • 如何在rails下的webrick中设置access-control-allow-origin?

    我编写了一个小型 Rails 应用程序 通过 xmlhttprequests 向另一个站点提供内容 该站点将从另一个域运行 不可能让它们在同一服务器上运行 我了解我需要在 Rails 服务器上设置 access control allow
  • 结帐页面中的 Woocommerce 付款方式检测

    我正在使用 woocommerce 插件和 woocommerce 的 Braintree 扩展进行付款 我已启用 woocommerce Braintree 的卡和贝宝付款来结账 我试图弄清楚如何在用户实际结账和付款之前知道用户选择哪个支
  • 停止所有子元素的 jQuery 动画

    祝大家新年快乐 我只是想问是否有任何方法可以停止元素的所有子节点的 jquery 动画 我的意思是 如果我在文档中有一个下面的 html 结构 并且我已经对容器内的所有 div 应用了不同的动画 有些也在 queue false 等中 di
  • 哪种嵌入式消息传递系统 -> ActiveMQ 或 HornetQ [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望得到一些关于这两个消息系统中哪一个的一般性指示和意见 更容易管理 需要了解和避免的陷阱或神奇的东西
  • 如何在 JUnit 5 中参数化 beforeEach()?

    我使用 JUnit 5 作为我的测试运行程序 在设置方法中 我硬编码了 3 个参数 platformName platformVersion and deviceName 我有一个测试方法 应该测试各种组合 这意味着 当运行我的testLo