how2j.cn

下载区
文件名 文件大小
junit-4.9.jar 243k
junit.rar 211k
步骤 1 : 用 main 进行测试   
步骤 2 : main 的问题   
步骤 3 : junit   
步骤 4 : 运行方式   
步骤 5 : 运行成功   
步骤 6 : 新增加一个测试方法   
步骤 7 : 运行失败   
步骤 8 : junit的好处   
步骤 9 : before & after   
步骤 10 : 可运行项目   
步骤 11 : Assert   

步骤 1 :

用 main 进行测试

edit
大家刚开始写代码的时候,都会用 main 函数来进行运行。顺便测试一下所写的代码,是否按照期望运行。
比如如下代码,用来测试sum方法是否按照预期进行执行。
package junit; public class SumUtil { public static void main(String[] args) { int result = sum1(1,2); System.out.println(result); } public static int sum1(int i, int j) { return i+j; } }
package junit;

public class SumUtil {

	public static void main(String[] args) {
		int result = sum1(1,2);
		System.out.println(result);
	}

	public static int sum1(int i, int j) {
		return i+j;
	}
	
}
通过main方法来进行测试的问题是显而易见的。
比如新开发了一个方法,是对3个数求和,那么问题至少有两个:
1. 要在原来测试的基础上修改,可能破坏原来的测试逻辑
2. 测试成功了,还是i测试失败了,都不知道呀。。。只能通过肉眼进行观察,如果测试的量很大,是很难看的过来滴
package junit; public class SumUtil { public static void main(String[] args) { int result = sum1(1,2); System.out.println(result); int result2 = sum2(1,2,3); System.out.println(result2); } public static int sum1(int i, int j) { return i+j; } public static int sum2(int i, int j, int k) { return i+j+k; } }
package junit;

public class SumUtil {

	public static void main(String[] args) {
		int result = sum1(1,2);
		System.out.println(result);
		int result2 = sum2(1,2,3);
		System.out.println(result2);
	}

	public static int sum1(int i, int j) {
		return i+j;
	}
	
	public static int sum2(int i, int j, int k) {
		return i+j+k;
	}
	
}
为了应付这种测试的需求,我们就需要使用 junit 测试框架来进行测试工作。
首先下载 jar 包: 放在右上角的 junit-4.9.jar, 导入到项目中。
然后创建 TestCase1类,并创建一个方法:

@Test
public void testSum1() {
int result = SumUtil.sum1(1, 2);
Assert.assertEquals(result, 3);
}

它是由 @Test 进行了注解,表示这个方法是一个测试方法
Assert.assertEquals(result, 3); 表示对 result 数值的期待是 3,如果是其他数值,就无法通过测试。
package junit; import org.junit.Test; import junit.framework.Assert; public class TestCase1 { @Test public void testSum1() { int result = SumUtil.sum1(1, 2); Assert.assertEquals(result, 3); } }
package junit;

import org.junit.Test;

import junit.framework.Assert;

public class TestCase1 {

    @Test
    public void testSum1() {
    	int result = SumUtil.sum1(1, 2);
    	Assert.assertEquals(result, 3);
    }

}
与main方法运行不一样,运行测试用例的时候,需要选择 Run As -> JUnit Test 方式
运行方式
运行成功之后,会显示如图所示的样子,是绿色的
运行成功
步骤 6 :

新增加一个测试方法

edit
接着,我们新增加一个 testSum2 方法, 用于测试sum2 方法。
这一次,我们故意写成

Assert.assertEquals(result, 5);

看看如果测试不能通过是什么样子的。
package junit; import org.junit.Test; import junit.framework.Assert; public class TestCase1 { @Test public void testSum1() { int result = SumUtil.sum1(1, 2); Assert.assertEquals(result, 3); } @Test public void testSum2() { int result = SumUtil.sum2(1, 2,3); Assert.assertEquals(result, 5); } }
package junit;

import org.junit.Test;

import junit.framework.Assert;

public class TestCase1 {

    @Test
    public void testSum1() {
    	int result = SumUtil.sum1(1, 2);
    	Assert.assertEquals(result, 3);
    }

    @Test
    public void testSum2() {
    	int result = SumUtil.sum2(1, 2,3);
    	Assert.assertEquals(result, 5);
    }
}
运行之后,因为 result 的值是 6, 并不等于5, 所以失败之后,看到如图所示的效果,表示没有通过测试。
而且还给出了失败的行数: TesetCase1.java:18
运行失败
现在回过头来看 junit 解决的main 的问题 中的2个问题
1. 新增加的测试,对原来的测试没有影响
2. 如果测试失败了,会立即得到通知
@Before @After 也是常见的测试框架注解,分别用来在测试开始之前做的事情,和结束之后做的事情。
before & after
package junit; import org.junit.After; import org.junit.Before; import org.junit.Test; import junit.framework.Assert; public class TestCase1 { @Before public void before() { System.out.println("测试前的准备工作,比如链接数据库等等"); } @After public void after() { System.out.println("测试结束后的工作,比如关闭链接等等"); } @Test public void testSum1() { int result = SumUtil.sum1(1, 2); Assert.assertEquals(result, 3); } @Test public void testSum2() { int result = SumUtil.sum2(1, 2,3); Assert.assertEquals(result, 5); } }
在右上角有本知识点对应的可运行项目下载 ,实在自己搞不出来,就下载解压出来比较一下。
关于 Assert的用法,除了举例里的判断数字是否相等,还可以判断boolean, 是否是null ,是否是相同对象等等常见逻辑。
用法都在截图里了,很简单,有兴趣就自己挨个试试好了
Assert


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2019-03-07 一个小问题
now2iava
Assert.assertEquals()方法参数说明是第一个才是期待值,第二个是实际值,站长似乎弄反了




1 个答案

mingzm 答案时间:2019-03-15
Assert.assertEquals(result, 5); 预期 result 的值为5 result != 5 则不通过测试



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2019-01-07 实际项目中,单元测试不容易做
yuanjzh
实际项目中,单元测试不容易做。不知道大神们产品代码的unit test是怎么做的。。’







回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2019-01-03 运行流程的疑惑




提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 应用-junit-入门教程 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 1001964108
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图