junit junit_JUnit理论简介

junit junit

您读过数学理论吗?

它通常读取如下内容:

对于所有a,b> 0满足以下条件:a + b> a和a + b> b

通常,这些语句更难以理解。

这种陈述有一些有趣的地方:它适用于相当大(在这种情况下为无限)集合的每个元素(或元素组合)。

将其与典型测试的陈述进行比较:

@Testpublic void a_plus_b_is_greater_than_a_and_greater_than_b(){int a = 2;int b = 3;assertTrue(a + b > a);assertTrue(a + b > b);}

这仅是关于我们所讨论的大集合中单个元素的陈述。 不太令人印象深刻。 当然,我们可以通过遍历测试(或使用参数化测试 )来解决此问题:

@Testpublic void a_plus_b_is_greater_than_a_and_greater_than_b_multiple_values() {List<Integer> values = Arrays.asList(1, 2, 300, 400000);for (Integer a : values)for (Integer b : values) {assertTrue(a + b > a);assertTrue(a + b > b);}}

当然,这仍然仅测试了一些值,但是也变得非常难看。 我们正在使用9行代码来测试数学家在一行中写的内容! 这种关系对于任何值a,b都应保持的要点在翻译中完全消失了。

但是仍然有希望: JUnit理论 。 让我们看看使用该漂亮工具的测试情况:

import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;import static org.junit.Assert.assertTrue;@RunWith(Theories.class)
public class AdditionWithTheoriesTest {@DataPointspublic static int[] positiveIntegers() {return new int[]{1, 10, 1234567};}@Theorypublic void a_plus_b_is_greater_than_a_and_greater_than_b(Integer a, Integer b) {assertTrue(a + b > a);assertTrue(a + b > b);}
}

使用JUnit理论,测试分为两个独立部分:提供数据点(即用于测试的值)的方法以及理论本身。 该理论看起来几乎像是一个测试,但是它具有不同的注释(@Theory)并且需要参数。 类中的理论将与数据点的每种可能组合一起执行。

这意味着,如果我们对测试主题有一个以上的理论,则只需声明数据点一次。 因此,让我们添加以下理论,这对于加法而言应该是正确的:a + b = b + a因此,我们将以下理论添加到我们的类@Theory中public void add_is_commutative(Integer a,Integer b){assertTrue(a + b == b + a); }

这就像一种魅力,并且可以开始看到它实际上也节省了一些代码,因为我们不重复数据点。 但是,我们仅使用正整数进行测试,而可交换属性应适用于所有整数! 当然,我们的第一个理论仍然只适用于正数

也有一个解决方案: 假设 。 假设您可以检查理论的先决条件。 如果对于给定的参数集不正确,则该理论将被跳过。 所以我们的测试现在看起来像这样:

@RunWith(Theories.class)public class AdditionWithTheoriesTest {@DataPointspublic static int[] integers() {return new int[]{-1, -10, -1234567,1, 10, 1234567};}@Theorypublic void a_plus_b_is_greater_than_a_and_greater_than_b(Integer a, Integer b) {Assume.assumeTrue(a >0 && b > 0 );assertTrue(a + b > a);assertTrue(a + b > b);}@Theorypublic void addition_is_commutative(Integer a, Integer b) {assertTrue(a + b == b + a);}
}

这使测试表现力很好。

将测试数据与测试/理论实现分开,除了简洁以外,还可以带来另一个积极的效果:您可能会开始考虑与实际测试内容无关的测试数据。

让我们做到这一点。 如果要测试采用整数参数的方法,那么哪些整数可能会引起问题? 这是我的建议:

@DataPointspublic static int[] integers() {return new int[]{0, -1, -10, -1234567,1, 10, 1234567, Integer.MAX_VALUE, Integer.MIN_VALUE};}

在我们的示例中,哪个当然会导致测试失败。 如果在Integer.MAX_VALUE中添加一个正整数,则会溢出! 因此,我们刚刚得知我们目前的理论是错误的! 是的,我知道这很明显,但是请看一下当前项目中的测试。 使用整数的所有测试是否都以MIN_VALUE,MAX_VALUE,0,正值和负值测试? 是的,是这样。

那更复杂的对象呢? 琴弦? 日期? 收藏? 还是领域对象? 使用JUnit Theories,您可以设置测试数据生成器一次,以创建所有容易产生问题的场景,然后使用这些理论在所有测试中重用这些场景。 这将使您的测试更具表现力,并提高发现错误的可能性。

参考:来自Java出现日历博客的JCG合作伙伴 Jens Schauder 对JUnit理论的介绍 。

翻译自: https://www.javacodegeeks.com/2013/12/introduction-to-junit-theories.html

junit junit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指数矩阵(exponential matrix)

类似于指数ex……e^x……ex……的本质是一种近似&#xff0c;eAt……e^{At}……eAt……是同样原理。 http://www.mashangxue123.com/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1756604500.html

【渝粤题库】陕西师范大学151210 成本会计作业 (专升本)

《成本会计【专升本】》作业 一、单选题 1.从现行企业会计制度的有关规定出发&#xff0c;成本会计的对象是&#xff08; &#xff09;。 A各项期间费用的支出及归集过程 B产品生产成本的形成过程 C诸会计要素的增减变动 D企业生产经营过程中发生的生产经营业务成本和期间费用 …

【渝粤题库】陕西师范大学152206领导科学 作业(高起专、专升本)

一、单项选择题 1、马克思主义领导科学的基本问题是&#xff08; &#xff09;。 A、正确处理领导者与客观环境的关系 B、正确处理被领导者与客观环境的关系 C、正确处理领导与学习的关系 D、正确处理领导者与被领导者的关系 2、著名的军事家孙子说&#xff0c;“将者&#xff…

Jenkins在AWS上(第1部分)

这是我对PEAT UK播客的逐字记录&#xff1a; 你好&#xff0c;再一次到另一个热点。 我叫Peter Pilgrim。 我曾经是DevOps专家&#xff0c;欢迎观看另一集。 这是11 Jenkins n AWS的第一部分&#xff0c;我是一名平台工程师&#xff0c;并且是Java Champion。 在本集中&…

【渝粤题库】国家开放大学2021春2227物业设备设施管理题目

试卷代号&#xff1a;2227 2021年春季学期期末统一考试 物业设备设施管理 试题&#xff08;开卷&#xff09; 2021年7月 一、单项选择题&#xff08;下列每题中的四个选择项中只有一个是正确的&#xff0c;请将其代号填在括号内。每题2分&#xff0c;共30分&#xff09; 1.设备…

Boole‘s,Doob‘s inequality,中心极限定理Central Limit Theorem,Kolmogorov extension theorem, Lebesgue‘s domin

1. Boole’s inequality In probability theory, Boole’s inequality, also known as the union bound, says that for any finite or countable set of events, the probability that at least one of the events happens is no greater than the sum of the probabilities …

【渝粤题库】国家开放大学2021春2302供应链管理题目

试卷代号&#xff1a;2302 2021年春季学期期末统一考试 供应链管理 试题 2021年7月 .一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;将正确答案填入括号内&#xff09; 1.不同的行业&#xff0c;不同的企业&#xff0c;其供应链形态一般( )。 A.相同 B.不…

【渝粤题库】国家开放大学2021春2320物流管理定量分析方法题目

试卷代号&#xff1a; 2320 2021年春季学期期末统一考试 物流管理定量分析方法 试题 2021年7月 物流管理定量分析方法 试题 2021年1月 MATLAB的常用标准函数和命令函数&#xff1a; 一、单项选择题&#xff08;每小题4分&#xff0c;共20分&#xff09; 1.若某物资的总供应量…

【渝粤题库】国家开放大学2021春2406现代汉语(2)题目

试卷代号&#xff1a;2406 2021年春季学期期末统一考试 现代汉语(2) 试题&#xff08;开卷&#xff09; 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共10分&#xff0c;每小题有一项答案正确&#xff0c;请将正确答案的序号填在括号内&#xff09; 1.与“故事片…

ddl hibernate_Hibernate:DDL模式生成

ddl hibernate不久前&#xff0c;我必须使用内存数据库。 该活动与集成测试有关。 如您所知&#xff0c;通常将内存数据库用于集成测试。 造成这种情况的原因有很多&#xff1a;可移植性&#xff0c;良好的环境基础结构&#xff0c;高性能&#xff0c;原始数据库的一致性。 问…

【渝粤题库】国家开放大学2021春2468酒店餐饮服务与管理题目

试卷代号&#xff1a;2468 2021年春季学期期末统一考试 酒店餐饮服务与管理 试题 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff09; 1.酒店经营从根本上说&#xff0c;只销售一样东西&#xff0c;就是( )。 A.食品 B.价格 C.文化 D.服务 2.同步性…

秩为 1 的矩阵的一些性质

前言 从上面的分析和例题看到&#xff0c;对于秩为1的n阶矩阵&#xff0c;零是其n重或n-1重特征值&#xff0c;如果是n-1重&#xff0c;则非零特征值是矩阵的主对角线元素之和;另外还看到&#xff0c;秩为1的矩阵可以分解为一个非零列向量与另一个非零列向量的转置的乘积&#…

【渝粤题库】国家开放大学2021春2518旅游法规答案

试卷代号&#xff1a;2518 2 0 2 1年春季学期期末统一考试 旅游法规试题答案及评分标准&#xff08;开卷&#xff09; &#xff08;供参考&#xff09; 2021年7月 一、单项选择题&#xff08;在备选答案中&#xff0c;有一个正确答案&#xff0c;请将正确答案的字母填在答题纸上…

Java Iterator到Java 8 Stream

有时在我的工作中&#xff0c;我需要与其他库集成&#xff0c;这些库将返回Iterator对象而不是列表。 从库的角度来看&#xff0c;这很好&#xff0c;但是当您想在返回的迭代器上使用Java 8流时&#xff0c;这可能是个问题。 有一种方法可以将Iterator转换为Iterable &#xff…

probability space 概率空间,Filtration,σ-algebras

1. probability space 概率空间 1.1 概率基础 1.2 概率空间 2. Filtration filtration在钱敏平老师和龚光鲁老师的《随机过程论》中直接称其为非降的KaTeX parse error: Undefined control sequence: \sigmma at position 1: \̲s̲i̲g̲m̲m̲a̲代数族。如图。 一般叫σ\…

【渝粤题库】国家开放大学2021春2617生产与运作管理题目

试卷代号&#xff1a;2617 2021年春季学期期末统一考试 生产与运作管理 试题&#xff08;开卷&#xff09; 、2021年7月 一、单项选择题&#xff08;每个小题2分&#xff0c;共20分&#xff09; 1.企业中支持正常生产提供动力的生产、工具制造、设备检修等活动从属于( )过程。 …

【渝粤题库】国家开放大学2021春2712园艺基础题目

试卷代号&#xff1a;2712 2021年春季学期期末统一考试 园艺基础 试题 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;15小题&#xff0c;共30分&#xff09; 1.在观赏植物消费中&#xff0c;( )产品的消费比例最大。 A.鲜切花 B.小盆花 C.草花 D.观叶植物 2.按生…

概率论中PDF、PMF和CDF的区别与联系

在概率论中&#xff0c;经常出现PDF、PMF和CDF&#xff0c;那么这三者有什么区别与联系呢&#xff1f; 1. 概念解释 PDF&#xff1a;概率密度函数&#xff08;probability density function&#xff09;, 在数学中&#xff0c;连续型随机变量的概率密度函数&#xff08;在不至…

【渝粤题库】国家开放大学2021春2748动物常见病防治题目

试卷代号&#xff1a;2748 2021年春季学期期末统一考试 动物常见病防治 试题 2021年7月 一、单项选择题&#xff08;每题3分&#xff0c;共60分&#xff09; 1.氢氰酸中毒的特效解毒药是( )。 A.二巯基丙醇 B.亚甲蓝 C.葡萄糖 D.亚硝酸钠 2.膀胱炎的诊断要点不包括( )。 A.血尿…