当前位置: 首页 > 知识库问答 >
问题:

JUnit5中没有ParameterResolver的前、后参数化

阚乐湛
2023-03-14

如何在Junit 5中参数化每个带注释的方法的@beforeach/@AfterEach?此方法应该从传递的流或对象列表中获取参数。

假设您有一个基类BaseSmokeTest,其中在名为prepare()的@beforeach注释方法中初始化WebDriver。现在,LoginSmokeTest或LogoutSmokeTest等其他类扩展了BaseSmokeTest,因此它们不关心WebDriver初始化。

我想为每个浏览器运行参数化测试。对我来说,唯一的解决方案是使用字符串参数参数化prepare()方法,该参数将指定要使用的浏览器-void prepare(String browserName)

我尝试过使用ParameterResolver来解析准备方法的参数,但是如果我理解正确的话,ParameterResolver只解析@Beforeeach/@Aftereach方法的参数一次。

我还尝试参数化构造函数,但再次-ParameterResolver仅解析构造函数的参数一次。

我正在寻找这样的解决方案:

@ValueSource(strings = {"firefox", "chrome"})
@BeforeEach
public void prepare(String browserName) {
    WebDriver driver = initializeWebDriver(browserName);
    WebDriverRunner.initialize(driver);
}

@AfterEach
public void cleanup() {
    WebDriverRunner.closeWebDriver();
}

编辑:我还应该声明这些参数化测试的所需功能是并行化——每个浏览器都应该在自己的会话中并行启动。

Edit2:我还应该提到BaseSmokeTest(尽管有这个名字)根本不包含任何测试,只是运行其他测试所需的Web驱动程序的初始化。测试只包含扩展BaseSmokeTest的类。

共有1个答案

蒙华翰
2023-03-14

如果不同浏览器的数量相当少,那么可以使用简单的抽象测试类方法。这里有一个草图:

abstract class BaseSmokeTest {
  abstract String getBrowserName();

  @BeforeEach
  public void prepare() {
    WebDriver driver = initializeWebDriver(getBrowserName());
    WebDriverRunner.initialize(driver);
  }

  @Test
  void test1() {}

  @Test
  void test2() {}
}

class FirefoxSmokeTest extends BaseSmokeTest {
  String getBrowserName() { return "firefox"; }
}


class ChromeSmokeTest extends BaseSmokeTest {
  String getBrowserName() { return "chrome"; }
} 

Jupiter现在将运行两个测试类:ChromeSmokeTestFirefoxSmokeTest。BaseSmokeTest中的每个测试方法将运行两次,每个混凝土测试类一次。

 类似资料:
  • 我正在尝试为vertx相关的东西写一个测试用例。 获取以下错误: 请帮助解决这个问题。

  • 我可以在没有任何特殊测试框架的情况下编写和执行Selenium脚本,但我希望使用JUnit5(因为我们依赖于其他工具),并且在使用JUnit4时从未见过这样的错误。 目前它是JUnit5,我在谷歌上搜索了一些想法,但不能解决这个问题。 使用、和的测试脚本:

  • 我试图用测试将我的项目从使用JUnit4升级到JUnit5。升级后: @RunWith(VertXUnitRunner.Class)-->@ExtendWith(VertXExtension.Class) @BeforeClass-->@BeforeAll等 我的一个类在setUp方法中开始崩溃。 与此类似:没有为参数[io.vertx.ext.unit.testContext arg0]注册Pa

  • 我有一个工作环境,包括我不管理的bom和JUnit5测试,除非我从如果我从它们不会被maven surefire插件拾取。我阅读了许多部分,并在一个较小的项目中进行了测试,它的工作和拾取,我不知道该在这篇文章中包含什么,因此您有足够的信息来查看问题所在。此外,如果有人能解释我阅读的导入的幕后内容,JUnit 4和5都需要使用surefire即 与版本 我很感激。 注意到 < li >我的测试都在s

  • 我试图定义一个,如示例MockitoExtension所提供的,但无法成功地使用参数化的类实例。 期待着关于如何用在中实现接口的类的参数化实例测试接口的建议。

  • 父页面 子组件 这样传递不对吗?