如何参数化 junit 测试套件

2023-12-07

是否可以在 junit 4 中参数化 TestSuite ?

为了将类声明为测试套件,我需要注释@RunWith(Suite.class),但也需要相同的注释来将测试声明为参数化:@RunWith(Parameterized.class)所以我不能将两者添加到同一个班级。

我发现了一个类似的question在这个网站上这并没有多大帮助。到目前为止,我找到的所有示例都解释了如何参数化简单的单元测试,而不是完整的测试套件。


我相信基本答案是否定的,因为正如您所说,@RunsWith 仅采用一个参数。我找到了一个博客文章有点创意在如何处理这种情况。

我们不使用参数化测试,但您可以像我们一样创建一个单独的套件,仅列出测试类,并且参数化测试可能是其中的一部分。我修改了我们的测试套件,将参数化测试类包含到套件的一部分中,并且运行良好。我们创建如下所示的套件,其中 PrimeNumberCheckerTest 是我从网络上获取的一个简单套件。

package com.jda.portfolio.api.rest.server;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({  com.mycompany.api.rest.server.resource.TestCartResourceJava.class, 
                 com.mycompany.api.rest.server.resource.TestCustomerResource.class,
                 com.mycompany.api.rest.server.resource.TestWizardProfileResource.class,
                 com.mycompany.api.rest.server.interceptor.TestBaseSearchInterceptor.class, 
                 com.mycompany.api.rest.server.resource.TestQueryParameters.class, 
                 com.mycompany.api.rest.server.expression.TestCartExpressionGenerator.class, 
                 com.mycompany.api.rest.server.expression.TestPreferenceExpressionGenerator.class, 
                 com.mycompany.api.rest.server.PrimeNumberCheckerTest.class, 
                 })
public class AllTests {}

这是参数化测试用例的来源;

package com.jda.portfolio.api.rest.server:

import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Parameterized.class)
@SuiteClasses({PrimeNumberCheckerTest.class})
public class PrimeNumberCheckerTest {
  private Integer inputNumber;
  private Boolean expectedResult;
  private PrimeNumberChecker primeNumberChecker;

  @Before
  public void initialize() {
     primeNumberChecker = new PrimeNumberChecker();
  }

  // Each parameter should be placed as an argument here
  // Every time runner triggers, it will pass the arguments
  // from parameters we defined in primeNumbers() method
  public PrimeNumberCheckerTest(Integer inputNumber, 
     Boolean expectedResult) {
     this.inputNumber = inputNumber;
     this.expectedResult = expectedResult;
  }

  @Parameterized.Parameters
  public static Collection primeNumbers() {
     return Arrays.asList(new Object[][] {
        { 2, true },
        { 6, false },
        { 19, true },
        { 22, false },
        { 23, true }
     });
  }

  // This test will run five times since we have as many parameters defined
  @Test
  public void testPrimeNumberChecker() {
     System.out.println("Parameterized Number is : " + inputNumber);
     assertEquals(expectedResult, 
     primeNumberChecker.validate(inputNumber));
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何参数化 junit 测试套件 的相关文章

随机推荐

  • Spring Batch Javaconfig - 参数化提交间隔又名块大小

    使用基于 Spring Batch xml 的配置 您可以参数化提交间隔 块大小 例如
  • 取消 Twitter 中待处理的 Bloodhound 请求 typeahead.js

    我的 Twitter typeahead js 设置如下 var filteredSource new Bloodhound datumTokenizer Bloodhound tokenizers obj whitespace value
  • WHERE 子句中的逻辑处理顺序或 SQL 标准

    几天前有人问我有关 SELECT 语句的逻辑处理顺序的问题 更具体地说 有关别名和 where 子句的问题 我不确定一个问题 如果我们有这样的查询 SELECT name AS first name FROM people WHERE fi
  • PhoneGap 中颜色选择器的示例代码

    我无法修复phonegap 中的colorpicker js 它不起作用 请帮忙吗 thanks colorSelector ColorPicker color 0000ff onShow function colpkr colpkr fa
  • 使用 AJAX 的文本内容和文件上传

    我正在为我的公司编写一个客户数据库系统 没有太多花哨的东西 但它做了它应该做的事情 现在所有基本的 文本 内容都已完成 我想在其中添加一些文件管理 我有几个表单通过ajax发送到后端 然后写入模型中的数据库 其中一些表格计划上传文档文件 有
  • 如何在时间列上组合基于约束的 R 数据帧

    我有两个 R 表 每个表都有一个用户列表和一个与他们采取特定操作的时间相对应的时间戳 其中第一个 df1 两个表具有详尽的用户列表 并且用户将具有具有不同时间戳的多行 第二 df2 将有一个更有限的用户列表 但用户将再次出现在表中 并具有不
  • 带有可编辑复选框的 JTable

    下面的代码是我的项目类之一 它生成一个框架JTable当我单击 查找 按钮时 一些数据将动态加载到表中 表的最后一列必须是带有事件的复选框 我尝试了这个复选框代码 从另一个项目中获取它 它不起作用 DefaultTableModel dtm
  • Perl 未在 Windows 10 中运行

    我刚刚在 64 位笔记本电脑上下载了适用于 Windows 10 的 ActivePerl 但是当我进入命令提示符时 perl v 会失败 除非目录是 C Perl64 bin 在这种情况下它会告诉我我有 Perl 5 20 2 版权所有
  • Kubernetes 部署 - 为图像拉取指定多个选项作为后备?

    我们所有可能的 docker 注册表 包括 Artifactory AWS ECR 和 GitLab 都曾一度遇到过镜像拉取问题 即使 DockerHub 偶尔也会出现问题 Kubernetes 部署中是否有一种方法可以指定 pod 可以从
  • 自定义运行时 node.js - 在 Google App Engine 中看不到我的自定义日志

    我们正在使用 Google App Engine 自定义运行时来运行移动应用程序的 Node js 服务器端代码 HTTP 请求日志记录工作正常 但我们的自定义日志存在问题 我们使用 Winston 和 log4js 作为日志记录框架 将应
  • jqPlot - 如何以编程方式查找哪个 jQuery UI 选项卡图存在

    请看下面的例子 http www jqplot com deploy dist examples hiddenPlotsInTabs html 在第一个示例中 通过捕获 tabshow 事件并查找选择了哪个选项卡来绘制隐藏图 tabs bi
  • 无法让 cabal 在 Windows 上找到 haskell-mpi 的 mpi 库 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 问题解决了 按照 Dons 发布的说明进行操作here
  • 如何创建包含单选和多选组合的完形填空题类型?

    我的问题出现在导出到 Moodle 的问题中 我打算创建一个完形填空题 其中一部分是单选 schoice 另一部分是多选 mchoice 使用 exams2moodle 函数导出时 我有两种可能的行为 所有问题都显示为 schoice 下拉
  • 如何使用 Ruby 对 iPhone 移动配置文件进行加密和签名

    我有一个由 iphone 配置实用程序生成的未签名的 xml 格式 模板 mobileconfig 文件 我想使用 openssl 对其进行加密和签名 并能够使用 Ruby on Rails 将其安装在 iphone 上 我不想创建 SCE
  • Pytorch maxpooling 通道维度

    我试图用 Pytorch 构建一个 cnn 但在 maxpooling 方面遇到了困难 我考了斯坦福举办的cs231n 我记得 maxpooling可以用作维度推导步骤 例如 我有这个 1 20 height width 输入ot max
  • C# 中的 64 位指针算术,检查算术溢出更改行为

    我有一些不安全的 C 代码 它们对类型上的大内存块进行指针算术byte 在 64 位机器上运行 它在大多数情况下都能正常工作 但是当事情变大时 我经常会遇到某种损坏 指针变得不正确 奇怪的是 如果我打开 检查算术溢出 下溢 一切都会正常工作
  • 正方体中未找到库错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我正在使用 OCR android 从谷歌搜索中获取样
  • 应用程序默认凭据不适用于 mac Google Cloud Storage 中的环境变量设置

    The Application Default Credentials are not available They are available if running in Google Compute Engine Otherwise t
  • 使用实体框架 SqlQuery 填充子实体

    我有两个 1 n 关系的实体 类别和产品 public class Category public int CategoryID get set public string CategoryName get set public virtu
  • 如何参数化 junit 测试套件

    是否可以在 junit 4 中参数化 TestSuite 为了将类声明为测试套件 我需要注释 RunWith Suite class 但也需要相同的注释来将测试声明为参数化 RunWith Parameterized class 所以我不能