JUNIT简单笔记

JUNIT是JAVA的单元测试框架,官网在这里:http://junit.org,这里是官网的第一句话:

JUnit is a simple framework to write repeatable tests. It is an instance of the xUnit architecture for unit testing frameworks.

如果你曾经被迫写过"野路子"的测试用例,你就明白手动测试有多痛苦。

如果你曾经参加过ACM区域赛,接受过ACM的训练,那么代码中有这么两句话你一定记忆深刻:

freopen("in", "r", stdin);

freopen("out", "w", stdout);

不错,这就是一个ACM标准程序c代码的开头部分,意思是从文件名为"in"的文件输入,从文件名为"out"的文件输出,然后你写了一个shell脚本去检查你的out文件和你手动计算出来的正确值文件进行比较,从而找出有哪些用力挂了,算法到底哪里出错了。

在看到一个题目的time limt:1000ms 的时候,你就会关注算法复杂度,是n^2还是n*logn,这时候你就凭经验知道n^2的复杂度在n=2000时就到上限了。但是到底怎么测试呢?以我的经验,没啥办法,基本靠经验。

如果你真的做过这样的事情,你就能体会到过程的复杂,因为算法一般都有bug,测试会进行很多次,你不停的去运行shell脚本,打印错误的值,不停的在你c(java)代码与shell脚本和terminal之间切来切去。你没办法专注算法本身,最后你因为时间限制与银牌擦肩而过,最后发现XX公司在校招要求上赫赫然地写着"2. ACM区域赛银牌及以上。",多么痛的领悟!!!

现在,有了junit,你就可以在一个文件中简单的将你的测试写进去,运行,就可以看到程序的输出和你的预期结果有什么差别了。唉,学校里从来也没人提过这种东西啊,早知道伤心总是难免的,我又何苦对ACM一往情深。

下面我们就来看看junit到底是怎么回事。

我们先写一个简单的加减乘除类:


图1

接下来我们编写这个类的测试类进行测试,需要注意的内容已经在代码的注视中写清楚了。


图2

可以看到我们的测试通过了:


图3

如果测试失败呢,比如我们3*3 = 9,但是我们在程序里不小心写成了a*b+1,于是返回10,那么junit就会给我们反馈:


图4

你看,我们跑了4个测试,有一个失败了,图4下半部分中写到java.lang.AssertionError: expected:<9> but was:<10>

在testMultiply这个方法中,我们期望的正确值是9,但是程序返回值是10.

那juint是怎么工作的呢?我们看下下面这个:


图5

运行结果如下:


图6

具体的解释可以看图5的注释,可以看到juint给了你很多自由发挥的空间。比如我们要测试spring程序,需要先加载ApplicationContext.xml文件,这时候你就可以在setUpBeforeClass中加载这个配置文件。

然后我告诉你,其实@Test注解还可以传参数,比如你知道测试里有一个bug,除数在某种情况下可能为0,但是你不想让这种情况影响测试正常地进行,这时候就可以这样:


图7

expected=ArithmeticException.class会捕捉除数为0这个异常,这个测试会安全通过。

下面就是常用的两个维度上的"一起运行":

如果有很多类需要测试,你写了很多测试类,那么是不是要一个一个的运行这些测试类?是不是希望有这么一个方法能一下运行很多不同的测试类:


图8

那如果一个类有很多测试数据呢,想想ACM你想被accept一次,你的代码需要接受100M的测试用例,这么多怎么办?


图9

怎么样?junit是不是很方便呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,642评论 18 139
  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,092评论 6 244
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,889评论 25 707
  • 很多人安于现状的原因都在于不愿踏出第一步,总是怕自己做不好、怕失败,我们不敢去学外语也是觉得难,怕学不会讲不好,当...
    奔跑在路上的驴阅读 372评论 0 0