概念
简单的说就是:写了个类,要给别人用,会不会有bug?怎么办?测试一下。
为什么要用单元测试
我们知道,用主函数main()方法也是可以测试的,但是用主函数测试有哪些缺点呢?
1.不能一起运行!
2.大多数情况下需要人为的观察输出确定是否正确
在开发工具(MyEclipse)中配置Junit4
首先 新建javaProject
由于MyEclipse自带了junit3和junit4的jar包,只需引入工程即可.
点击项目 ->右键->属性 然后弹出
选择
单击下一步
完成
Junit4jar包添加完成!
下面来测一个简单的例子
创建一个JDemo类,里面有一个add方法
建立测试用例
New -> Other -> TestCase 如图所示:
setUp()方法: 在测试方法前调用,主要用来做测试准备工作
setUpBeforeClass()方法: 在整个类初始化之后调用,主要用来做测试准备工作
teardown()方法: 在测试方法后调用,主要用来做测试清理工作
tearDownAfterClass()方法: 在整个类结束之前调用,主要用来做测试清理工作
我们可以点击浏览: 来选择被测试的方法
选好类后,点击下一步
把方法选上 然后点完成
会自动生成被测试的方法
注:方法名命名规范:test+被测试的方法
注意:方法上面的 @Test 标记 表示此方法是 被测试的方法
右键 在类 或者 选中方法 运行 run as
结果:
条是绿色的表示通过
其中 里面的assertEquals()方法的作用
需导入
此导入方式为 静态导入. 即:在使用此类里面的方法时,不用以 类名.方法 这种形式了
而直接写方法名即可.
assertEquals(期望的值,比较的值);
如果相等 则测试通过.
放弃旧的断言,使用hamcrest断言
导入
使用里面的is()方法
assertThat(比较的值,is(期望的值))
故语意更为通顺,更自然. 意思是:z是不是11
此时报了一个错误
那是因为 我们一共用了2种包,一种是junit4的包,一种是hamcrest的包
但java.lang.ClassLoader用的不是同一个.
解决方案: 把MyEcilpse自带的junit4删掉 引入自己下载的junit4jar包
Failure和Error
Failure:是指测试失败.
Errot:是指程序本身出了错误 例如 :
Juint4的Annotation
expected 和 timeout
expected 后面是你期望出现的异常 如果出现了 则测试通过.
timeout 规定该方法执行的时间.
如何运行多个测试
下面来运行它们两个测试用例 点击test包 run Configuations