gpt4 book ai didi

java - 如何编写一个 JUnit 运行程序,在 @Category 中的 TestCase 之前运行 @BeforeCategory 方法?

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:41 25 4
gpt4 key购买 nike

我正在尝试编写一个特定的 JUnit Runner,但我在网上没有找到好的教程/示例。

要求如下:

  • 我将进行一些分类测试(例如来自类别 catA 的 A.java、来自类别 catA 的 B.java、来自类别 catC 的 C.java
  • 每个测试都有一个 @BeforeClass 方法,如果单独启动测试,则需要运行该方法
  • 启动同一类别的所有测试时,@BeforeClass 方法只能启动一次。
  • Junit 测试中的每个 @Test 方法还具有 @Before@After 方法。

话虽如此,我还是研究了可用的不同选项。

我首先使用提供的 junit Suite Runner 创建代表我的测试类别的测试套件。 (@RunWith(Suite.class))您需要使用 @SuiteClasses() 在套件中手动提供 Tests,这很烦人。

所以我查看了 ClasspathSuite Runner,它允许将类路径中的所有类放入每个套件中,并使用 @Category 过滤它们

它还提供了一个 @BeforeSuite 注释,该注释在套件启动时启动一次。

=> 一切都近乎完美。

  • 启动单个测试时,会启动该测试中的 @BeforeClass
  • 启动测试套件时,会启动正确的测试(感谢@Category),@BeforeSuite仅被调用一次,但每个测试的@BeforeClass也会被调用,这是不应该的。

=> 所有这些事情让我考虑实现我自己的 Runner。我尝试扩展 ClasspathSuite Runner,但它的设计初衷并不是这样做。我尝试扩展库存 Suite Runner,但没有成功。

您能帮助我了解如何在 JUnit Runner 中实现这些要求吗?

最佳答案

不写运行者怎么样?相反,编写一个使用单例列表的 @BeforeClass 方法,该列表记录当前测试运行中已运行的每个 before-category 方法,并且知道如何运行所有 before-category 方法(每个方法可能在其自己的类中)。 @BeforeClass 方法确定其类的 @Category,检查列表,然后

  • 如果 @Category 的 before-category 方法已经运行,则不执行任何操作,或者
  • 运行 before-category 方法,并在列表中注明 @Category 的方法已运行。

不需要自定义运行程序更好,因为它可以在提供自己的运行程序的环境中工作,例如 IDE 和持续集成服务器。

关于java - 如何编写一个 JUnit 运行程序,在 @Category 中的 TestCase 之前运行 @BeforeCategory 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23870993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com