我始终依靠TestNG将参数传递给测试方法,以便为我的测试或套件提供一些灵活性。

但是,使用JUnit4可以实现相同的灵活性。

要使用它很简单:

package com.marco.test;import java.util.Arrays;import java.util.Collection;import junit.framework.Assert;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;@RunWith(Parameterized.class)public class ParameterizedTest {@Parameterspublic static Collection data() {return Arrays.asList(new Object[][] {/* Sport Nation year totWinners */{ “basket”, “usa”, 2002, 5, },{ “soccer”, “argentina”, 2003, 2 },{ “tennis”, “spain”, 2004, 10 },{ “chess”, “ireland”, 2005, 0 },{ “eatingbananas”, “italy”, 2006, 20 }});}private final String sport;private final String nation;private final int year;private final int totWinners;public ParameterizedTest(String sport, String nation, int year, int totWinners) {this.sport = sport;this.nation = nation;this.year = year;this.totWinners = totWinners;}@Testpublic void test() {Assert.assertTrue(isDataCorrect(sport, nation, year, totWinners));}private boolean isDataCorrect(String sport2, String nation2, int year2, int totWinners2) {return true;}}

JUnit将创建ParameterizedTest类的实例,并为静态集合中定义的每一行运行testCombination()方法(或标记为@Test的任何方法)。

理论

我喜欢JUnit4的另一个有趣的功能。 您可以在JUnit 4中使用Theories使用相同的测试方法来测试输入的组合:

package com.marco.test;import static org.hamcrest.CoreMatchers.is;import java.math.BigDecimal;import org.junit.Assert;import org.junit.Assume;import org.junit.experimental.theories.DataPoint;import org.junit.experimental.theories.Theories;import org.junit.experimental.theories.Theory;import org.junit.runner.RunWith;@RunWith(Theories.class)public class TheoryTest {@DataPointpublic static int MARKET_FIRST_GOALSCORERE_ID = 2007;@DataPointpublic static int MARKET_WDW_ID = 2008;@DataPointpublic static BigDecimal PRICE_BD = new BigDecimal(6664.0);@DataPointpublic static double PRICE_1 = 0.01;@DataPointpublic static double PRICE_2 = 100.0;@DataPointpublic static double PRICE_3 = 13999.99;@Theorypublic void lowTaxRateIsNineteenPercent(int market_id, double price) {Assume.assumeThat(market_id, is(2008));Assume.assumeThat(price, is(100.0));// run your testAssert.assertThat(price, is(100.0));}@Theorypublic void highTaxRateIsNineteenPercent(int market_id, double price) {Assume.assumeThat(market_id, is(2007));Assume.assumeThat(price, is(13999.99));Assert.assertThat(price, is(13999.99));}@Theorypublic void highTaxRateIsNineteenPercent(int market_id, BigDecimal price) {Assume.assumeThat(market_id, is(2007));Assert.assertThat(price, is(BigDecimal.valueOf(6664)));}}

这次您需要将测试类标记为@RunWith(Theories.class),并使用@DataPoint定义要测试的属性。

JUnit将根据提供的DataPoint和变量的类型使用所有可能的组合将方法市场称为@Theory。 PRICE_BD DataPoint仅在最后一个方法中使用,唯一一个在其方法参数中接受BigDecimal的方法。

只有满足Assume.assumeThat()条件的参数才能通过asser测试。 不满足Assume.assumeThat()条件的组合将被静默忽略。

参考:来自我们的JCG合作伙伴 Marco Castigliego的“ JUnit4参数化和理论” ,位于“ 删除重复并修复不良名称”博客中。

翻译自: https://www.javacodegeeks.com/2012/11/junit4-parameterized-and-theories-examples.html

JUnit4参数化和理论示例相关推荐

  1. junit 经典示例_JUnit4参数化和理论示例

    junit 经典示例 我始终依靠TestNG将参数传递给测试方法,以便为我的测试或套件提供一些灵活性. 但是,使用JUnit4可以实现相同的灵活性. 要使用它很简单: package com.marc ...

  2. 【运筹学】对偶理论 : 对称理论示例 ( 对称理论 | 标准的原问题对偶问题 | 原问题目标函数求最小值示例 | 求对偶技巧 ) ★

    文章目录 一.对称理论 二.对偶理论示例 三.对偶理论示例 2 四.求对偶技巧 ★★ 一.对称理论 参考 [运筹学]对偶理论 : 对称形式 ( 对称形式 | 对偶模型转化实例 | 对偶问题规律分析 ) ...

  3. 注会java_CPA理论与Base理论(示例代码)

    CPA理论: 由于对系统或者数据进行了拆分,我们的系统不再是单机系统,而是分布式系统,针对分布式系统的CAP原理包含如下三个元素. C:Consistency,一致性.在分布式系统中的所有数据 备份, ...

  4. Junit4使用教程详解

    下载Junit4相关Jar包(一般eclipse等IDE已经集成): 资源链接: https://download.csdn.net/download/yl405001832/11580748 将ja ...

  5. getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)

    作者:CHAITANYA SINGH 来源:通过示例学习Java编程(14):Java中的构造函数-方家话题 构造函数是用来初始化新创建的对象的代码块.构造函数类似于java中的实例方法(Instan ...

  6. 批处理写入以及动态与参数化SQL,数据库的性能如何?

    批处理写入是最有效的数据库优化之一. 批处理写入受大多数现代数据库和JDBC标准的一部分支持,并且受大多数JPA提供程序支持. 普通数据库访问包括在单独的数据库/网络访问中将每个DML(插入,更新,删 ...

  7. sql server 并发_并发问题– SQL Server中的理论和实验

    sql server 并发 介绍 (Introduction) Intended audience 目标听众 This document is intended for application dev ...

  8. dapper mysql 多参数查询_使用Dapper进行参数化查询

    在使用Dapper操作Mysql数据库中我介绍了使用dapper进行CURD基本操作,但在示例代码中参数虽然也是通过@开头,但其实不是真正意义的参数化查询,而是拼接sql,这种方式不利于防止sql注入 ...

  9. C#坏习惯:通过不好的例子学习如何制作好的代码——第1部分

    目录 介绍 类写得那么糟糕...... 1.命名 2.神奇数字      ​ 3.不明显的错误 4.不可读 5.神奇数字--又一次 6.DRY--不要重复自己 7.每类多重责任 重构... I STE ...

最新文章

  1. 相机模型--A Unifying Theory for Central Panoramic Systems and Practical Implications
  2. go使用SQLite数据库
  3. Swagger UI 与SpringMVC的整合 II
  4. 试卷汇编与解析二级C语言,计算机等级考试试卷汇编与解析
  5. webstorm+nodejs环境中安装淘宝镜像
  6. 直播围观!百度大脑智能监控如何为安全生产保驾护航?
  7. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步怪物运动简单AI
  8. HUE与HDFS的集成
  9. 征服ASP.NET Ajax典型应用 (试读)
  10. 赵容弼(Cho Yong Pil) -《30周年纪念专辑》
  11. 新一代数据仓库:Snowflake 弹性数仓介绍
  12. 问题 D: 寻找丢失的LZY
  13. WinForm分页控件
  14. 叠氮PEG6基团N3-PEG6-alcohol,86770-69-6
  15. iOS开发——BAT网易笔试面试题参考答案
  16. Android开发快速入门及导出apk
  17. 关于利率的c语言程序,【c语言】储蓄利息的计算
  18. android系统通过图片绝对路径获取URI的三种方法
  19. DOM基本操作(获取元素、节点的创建和添加、节点的替换和删除)
  20. Linux多线程---线程概念和线程控制

热门文章

  1. java后台 flex前台例子_flex+blazeds+java后台消息推送(简单示例)
  2. 调用toString()方法的注意事项
  3. 自定义类加载器(ClassLoader + URLClassLoader)
  4. java 创建uri_使用UriBuilder快速创建URI
  5. rabbitmq 传递文件_使用RabbitMQ进行消息传递
  6. Jakarta EE中的规范范围
  7. jvm 内存镜像_镜像镜像–使用反射在运行时查看JVM内部
  8. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...
  9. 为Envoy构建控制平面的指南-特定于域的配置API
  10. jdk7默认gc算法_JDK 7的算法和数据结构