junit学习笔记(一):JUnit的安装和测试原则

这里以一个加减乘除的类为例子。

最终工程如下:




1、导入junit的jar,不建议直接使用eclipse 中提供的包
      junit的jar包下载: 点击打开链接 最新版本的是4.11
      这里注意一个问题 如果是用4.11版本的话,同时还要下载hamcrest 1.3,下载地址-> 点击打开链接,使用时,要同时导入这两个包才可以!!
      如果是之前版本的,只需要导入一个junit的jar包就可以了


2、在src目录下编写服务代码,这里是一个只有加减乘除功能的类
package com.fjnu.util;

public class Calculate {
	public int add(int a, int b){
		return a+b;
	}
	public int minus(int a, int b){
		return a-b;
	}
	public int divide(int a,int b){
		return a/b;
	}
	public int multi(int a, int b){
		return a*b;
	}
}


3、创建测试类
     基本原则:1、在eclipse中创建一个source folder命名为test
                     2、创建一个测试类所在的包,包的名称和要测试的类一致

package com.fjnu.util;

import org.junit.Before;
import org.junit.Test;
// 静态导入
import static org.junit.Assert.*;

public class TestCalculate {
	private Calculate cal;
	
	// 执行任意一个方法之前都会执行setUp方法
	@Before
	public void setUp(){
		cal = new Calculate();
	}
	
	// 加了@Test表示该方法是一个单元测试
 	@Test
	public void testAdd(){
		/*
		 * 以下是一个简单的断言的编写
		 * 第一个参数是如果出错给出的提示信息
		 * 第二个表示期望值,通常是用户指定的内容
		 * 第三个表示代码返回的实际值
		 */
	//	Assert.assertEquals("加法有问题", 34, cal.add(12,22));
 		/*
 		 * 由于包进行了静态导入之后
 		 * Assert中的所有静态方法就不用再添加类名了
 		 * 这样可以有效地兼容junit3
 		 */
 		assertEquals("加法有问题", 34, cal.add(12,22));
	}
 	@Test
 	public void testMinus(){
 		int res = cal.minus(12, 2);
 //		Assert.assertEquals("减法有问题", 10, res);
 		assertEquals("减法有问题", 10, res);
 	}
 	// 表示这个测试类应该抛出ArithmeticException,如果不抛出就报错
 	@Test(expected=ArithmeticException.class)
 	public void testDivide(){
 		int res = cal.divide(12, 0);
 		assertEquals("除法有问题", 6, res);
 	}
 	
 	// 时间单位为ms
 	@Test(timeout=190)
 	public void testTime() throws InterruptedException{
 	 	Thread.sleep(209);
 		int rel = cal.divide(12, 2);
 	}
 	
 	@Test
 	public void testMulti(){
 		int res = cal.multi(12, 2);
 		assertEquals("乘法有问题",24,res);
 	}
 	//hamcrest 1.3
}




4、Junit3和Junit4两者之间的区别是非常明显的
     在Junit3,中如果某个类需要是测试类,必须将其继承于TestCase,如果某个方法需要是测试方法,必须让这个方法通过testXXX开头,在Junit3中如果希望指定某个测试方法运行之前运行某个初始化方法,这个方法名称必须是setUp,如果希望在某个测试方法运行之后运行某个释放资源的方法,这个方法的名称必须是tearDown
       在Junit4中,一个POJO类就是一个测试类,测试方法通过@Test来标识,初始化方法通过@Before,释放资源的方法通过@After来标注。但是为了让junit4中的测试类在junit3中也可以使用,习惯于把初始化方法命名为setUp,释放资源的方法命名为tearDown,测试方法也同样以test开头

5、如何使用断言
     在junit4中提供了一个Assert的类,这个类中有大量的方法进行断言的处理,在junit3中由于继承了TestCase,这个TestCase中提供了大量的Assert方法。 在junit4中,为了与junit3兼容,可以静态导入包Assert,即import static org.junit.Assert.*;  这样的话使用Assert中的所有静态方法就不用再添加类名了,可以有效地兼容junit3


6、expected参数,测试异常对象:    @Test(expected=ArithmeticException.class),表示检查是否抛出ArithmeticException
       // 表示这个测试类应该抛出ArithmeticException,如果不抛出就报错
       @Test(expected=ArithmeticException. class)
       public void testDivide(){
             int res = cal.divide(12, 2);
             assertEquals( "除法有问题", 6, res);
      }



7、 timeout参数, 性能测试: @Test(timeout=190),表示要在190ms内完成
       // 时间单位为ms
       @Test(timeout=190)
       public void testTime() throws InterruptedException{
            Thread. sleep(189);
             int rel = cal.divide(12, 2);
      }
 
Files contained in junit4-4.8.2.jar: LICENSE.txt META-INF/MANIFEST.MF junit.extensions.ActiveTestSuite.class junit.extensions.RepeatedTest.class junit.extensions.TestDecorator.class junit.extensions.TestSetup.class junit.extensions.package-info.class junit.framework.Assert.class junit.framework.AssertionFailedError.class junit.framework.ComparisonCompactor.class junit.framework.ComparisonFailure.class junit.framework.JUnit4TestAdapter.class junit.framework.JUnit4TestAdapterCache.class junit.framework.JUnit4TestCaseFacade.class junit.framework.Protectable.class junit.framework.Test.class junit.framework.TestCase.class junit.framework.TestFailure.class junit.framework.TestListener.class junit.framework.TestResult.class junit.framework.TestSuite.class junit.framework.package-info.class junit.runner.BaseTestRunner.class junit.runner.TestRunListener.class junit.runner.Version.class junit.runner.package-info.class junit.textui.ResultPrinter.class junit.textui.TestRunner.class junit.textui.package-info.class org.hamcrest.BaseDescription.class org.hamcrest.BaseMatcher.class org.hamcrest.CoreMatchers.class org.hamcrest.Description.class org.hamcrest.Factory.class org.hamcrest.Matcher.class org.hamcrest.SelfDescribing.class org.hamcrest.StringDescription.class org.hamcrest.core.AllOf.class org.hamcrest.core.AnyOf.class org.hamcrest.core.DescribedAs.class org.hamcrest.core.Is.class org.hamcrest.core.IsAnything.class org.hamcrest.core.IsEqual.class org.hamcrest.core.IsInstanceOf.class org.hamcrest.core.IsNot.class org.hamcrest.core.IsNull.class org.hamcrest.core.IsSame.class org.hamcrest.internal.ArrayIterator.class org.hamcrest.internal.SelfDescribingValue.class org.hamcrest.internal.SelfDescribingValueIterator.class org.junit.After.class org.junit.AfterClass.class org.junit.Assert.class org.junit.Assume.class org.junit.Before.class org.junit.BeforeClass.class org.junit.ComparisonFailure.class org.junit.Ignore.class org.junit.Rule.class org.junit.Test.class org.junit.experimental.ParallelComputer.class org.junit.experimental.categories.Categories.class org.junit.experimental.categories.Category.class org.junit.experimental.max.CouldNotReadCoreException.class org.junit.experimental.max.MaxCore.class org.junit.experimental.max.MaxHistory.class org.junit.experimental.results.FailureList.class org.junit.experimental.results.PrintableResult.class org.junit.experimental.results.ResultMatchers.class org.junit.experimental.runners.Enclosed.class org.junit.experimental.theories.DataPoint.class org.junit.experimental.theories.DataPoints.class org.junit.experimental.theories.ParameterSignature.class org.junit.experimental.theories.ParameterSupplier.class org.junit.experimental.theories.ParametersSuppliedBy.class org.junit.experimental.theories.PotentialAssignment.class org.junit.experimental.theories.Theories.class org.junit.experimental.theories.Theory.class org.junit.experimental.theories.internal.AllMembersSupplier.class org.junit.experimental.theories.internal.Assignments.class org.junit.experimental.theories.internal.ParameterizedAssertionError.class org.junit.experimental.theories.suppliers.TestedOn.class org.junit.experimental.theories.suppliers.TestedOnSupplier.class org.junit.internal.ArrayComparisonFailure.class org.junit.internal.AssumptionViolatedException.class org.junit.internal.ComparisonCriteria.class org.junit.internal.ExactComparisonCriteria.class org.junit.internal.InexactComparisonCriteria.class org.junit.internal.JUnitSystem.class org.junit.internal.RealSystem.class org.junit.internal.TextListener.class org.junit.internal.builders.AllDefaultPossibilitiesBuilder.class org.junit.internal.builders.AnnotatedBuilder.class org.junit.internal.builders.IgnoredBuilder.class org.junit.internal.builders.IgnoredClassRunner.class org.junit.internal.builders.JUnit3Builder.class org.junit.internal.builders.JUnit4Builder.class org.junit.internal.builders.NullBuilder.class org.junit.internal.builders.SuiteMethodBuilder.class org.junit.internal.matchers.CombinableMatcher.class org.junit.internal.matchers.Each.class org.junit.internal.matchers.IsCollectionContaining.class org.junit.internal.matchers.StringContains.class org.junit.internal.matchers.SubstringMatcher.class org.junit.internal.matchers.TypeSafeMatcher.class org.junit.internal.requests.ClassRequest.class org.junit.internal.requests.FilterRequest.class org.junit.internal.requests.SortingRequest.class org.junit.internal.requests.package-info.class org.junit.internal.runners.ClassRoadie.class org.junit.internal.runners.ErrorReportingRunner.class org.junit.internal.runners.FailedBefore.class org.junit.internal.runners.InitializationError.class org.junit.internal.runners.JUnit38ClassRunner.class org.junit.internal.runners.JUnit4ClassRunner.class org.junit.internal.runners.MethodRoadie.class org.junit.internal.runners.MethodValidator.class org.junit.internal.runners.SuiteMethod.class org.junit.internal.runners.TestClass.class org.junit.internal.runners.TestMethod.class org.junit.internal.runners.model.EachTestNotifier.class org.junit.internal.runners.model.MultipleFailureException.class org.junit.internal.runners.model.ReflectiveCallable.class org.junit.internal.runners.package-info.class org.junit.internal.runners.statements.ExpectException.class org.junit.internal.runners.statements.Fail.class org.junit.internal.runners.statements.FailOnTimeout.class org.junit.internal.runners.statements.InvokeMethod.class org.junit.internal.runners.statements.RunAfters.class org.junit.internal.runners.statements.RunBefores.class org.junit.matchers.JUnitMatchers.class org.junit.matchers.package-info.class org.junit.package-info.class org.junit.rules.ErrorCollector.class org.junit.rules.ExpectedException.class org.junit.rules.ExternalResource.class org.junit.rules.MethodRule.class org.junit.rules.TemporaryFolder.class org.junit.rules.TestName.class org.junit.rules.TestWatchman.class org.junit.rules.Timeout.class org.junit.rules.Verifier.class org.junit.runner.Computer.class org.junit.runner.Describable.class org.junit.runner.Description.class org.junit.runner.JUnitCore.class org.junit.runner.Request.class org.junit.runner.Result.class org.junit.runner.RunWith.class org.junit.runner.Runner.class org.junit.runner.manipulation.Filter.class org.junit.runner.manipulation.Filterable.class org.junit.runner.manipulation.NoTestsRemainException.class org.junit.runner.manipulation.Sortable.class org.junit.runner.manipulation.Sorter.class org.junit.runner.manipulation.package-info.class org.junit.runner.notification.Failure.class org.junit.runner.notification.RunListener.class org.junit.runner.notification.RunNotifier.class org.junit.runner.notification.StoppedByUserException.class org.junit.runner.notification.package-info.class org.junit.runner.package-info.class org.junit.runners.AllTests.class org.junit.runners.BlockJUnit4ClassRunner.class org.junit.runners.JUnit4.class org.junit.runners.Parameterized.class org.junit.runners.ParentRunner.class org.junit.runners.Suite.class org.junit.runners.model.FrameworkField.class org.junit.runners.model.FrameworkMember.class org.junit.runners.model.FrameworkMethod.class org.junit.runners.model.InitializationError.class org.junit.runners.model.RunnerBuilder.class org.junit.runners.model.RunnerScheduler.class org.junit.runners.model.Statement.class org.junit.runners.model.TestClass.class org.junit.runners.package-info.class org/hamcrest/core/package.html org/hamcrest/package.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值