当前位置: 首页 > 面试题库 >

排除单个JUnit测试方法而不修改Test类?

萧嘉禧
2023-03-14
问题内容

我目前正在针对我的代码重用另一个项目中的JUnit
4测试。我可以从其他项目的资源库中直接获取它们,这是我的自动化Ant构建的一部分。这很棒,因为它可以确保我的代码相对于最新版本的测试保持绿色。

但是,有一些测试子集我从未期望通过我的代码。但是,如果我开始在这些测试中添加@Ignore批注,则必须维护我自己的测试实现的单独副本,而我 真的
不想这样做。

有没有办法在不修改测试源的情况下排除单个测试?到目前为止,这是我看过的内容:

  • 据我所知,Ant JUnit任务仅允许您排除整个Test类,而不是单个测试方法-因此这对我不利,我需要方法粒度。

  • 我考虑将一个TestSuite放在一起,它使用反射功能来动态查找并添加所有原始测试,然后添加代码以显式删除我不想运行的测试。但是当我发现TestSuite API没有提供删除测试的方法时,我放弃了这个想法。

  • 我可以创建自己的Test类,以扩展原始Test类,覆盖我不想运行的特定测试,并使用@Ignore对其进行注释。然后,我在子类上运行JUnit。这里的缺点是,如果将新的Test类添加到原始项目中,我将不会自动选择它们。当新的Test类添加到原始项目中时,我将不得不对其进行监视。到目前为止,这是我最好的选择,但并不理想。

  • 我唯一想到的另一种选择是无论如何都要运行不良测试并忽略故障。但是,这些测试需要一段时间才能运行(并且失败!),所以我宁愿完全不运行它们。另外,我看不到一种告诉Ant任务忽略特定测试方法失败的方法(再次-我看到了如何为单个Test类(而不是方法)做到这一点)。


问题答案:

如果您根本无法触摸原始测试,那么您将受到一些严重的限制。您的压倒一切听起来是最好的选择,但有一些更改:

专门构建排除超级类的Ant测试,以便运行您不了解的其他类。

您可以使用@Rule批注(JUnit
4.7的新增功能)来了解正在运行的测试并中止测试(通过返回空的Statement实现),而不是重写特定的方法,从而使您在了解是否避免测试方面拥有更大的灵活性。
。此方法的唯一问题是您无法停止使用此方法运行@Before方法。如果这是一个问题(并且您真的无法通过测试),那么我只能想到重写方法中的@Ignore。

但是,如果您可以触摸这些测试,则会打开一些其他选项:

您可以通过在类上指定@RunWith标记,使用自定义运行程序来运行它们。该运行程序只是将执行传递给该项目中的标准运行程序(JUnit4.class),但在您的项目中(通过系统属性或其他某种机制)将检查测试名称而不运行测试。这样做的好处是侵入性最少,但实施起来最困难(流浪者是毛茸茸的野兽,@
Rule的既定目标之一是消除制造它们的大部分需求)。

另一种方法是在测试中做出一个that语句,该语句将检查某些配置设置,如果该测试应运行,则该设置为true。实际上,这实际上涉及向测试中注入权利,这很可能成为远程标记为“单独项目”的任何事物的破坏因素。



 类似资料:
  • 问题内容: 我的测试类中的所有测试在执行每个测试之前都执行一个“ before”方法(用JUnit标记)。 我需要一个特殊的测试,以不执行此方法之前。 有办法吗? 问题答案: 不幸的是,您必须编写此逻辑。JUnit没有这种功能。通常,您有2个解决方案: 只需将测试用例与2个测试用例分开:一个包含需要“在运行前”运行的测试,另一个包含不需要的测试。 实施自己的测试运行并注释测试以使用它。创建自己的注

  • 我正在设置Junit测试套件。我知道如何使用运行类中所有测试的标准方法来设置测试套件,例如这里。 是否可以创建一个并且只运行来自几个不同类的某些测试? 如果是,我该怎么做?

  • 本节介绍与JUnit Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 JUnit Mock Test I 问题1 - 以下哪项描述正确测试? A - 测试是检查应用程序功能的过程,是否按照要求运行。 B - 测试是单个实体(类或方法)的测试。 C - 以上两者。 D - 以上都

  • 问题内容: 我有一个充满void方法的Java类,我想进行一些单元测试以获得最大的代码覆盖率。 例如我有这种方法: 它的名字不好用是因为我翻译了代码以更好地理解。每种方法均会验证参数是否在某种程度上有效并且编写正确。 范例: 我的单元测试很好地涵盖了小的方法,因为我要求它们检查ErrorFile是否包含错误消息,但是我看不到如何测试方法checkIfValidElements,它什么也不返回或什么

  • 一、JUnit 是什么? JUnit 是一个 Java 语言的回归测试框架(regression testing framework),由 Kent Beck 和 Erich Gamma 建立。 Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能。 二、IDEA 的 开始JUnit测试 测试项:查询全部用户数据 junit测试方法:

  • 我要从Thorntail搬到Quarkus。在我的测试中,我曾创建一个@deployment方法,在该方法中,我只放置测试所需的内容。特别是,我没有把一个类放在@Startup注释中(因为我不想测试它…)。当我移动到QUARKUS时,我抑制了de@deployment静态方法,然后当我启动测试时@Startup是。。。一开始,发生了很多不好的事情,阻止我测试我想要测试的东西(好吧,它崩溃了,因为它