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是不是很方便呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容