您好,欢迎访问三七文档
1、建立Junit测试类1.1右击test测试包,选择New--Oher...2.2在窗口中找到Junit,选择JunitTestCase3.3输入名称(Name),命名规则一般建议采用:类名+Test。Browse...选择要测试的类,这里是StudentService。4.4勾选要测试的方法5.5生成后,效果如下这里importstatic是引入Assert类中静态属性或静态方法的写法。原来要Assert.fail(),现在只需直接fail()即可,即省略了Assert。其实不通过Junit新建向导来建立也可以,随便建立一个新类后,只需在方法上加入@Test注解即可。2、核心——断言断言是编写测试用例的核心实现方式,即期望值是多少,测试的结果是多少,以此来判断测试是否通过。2.1断言核心方法assertArrayEquals(expecteds,actuals)查看两个数组是否相等。assertEquals(expected,actual)查看两个对象是否相等。类似于字符串比较使用的equals()方法assertNotEquals(first,second)查看两个对象是否不相等。assertNull(object)查看对象是否为空。assertNotNull(object)查看对象是否不为空。assertSame(expected,actual)查看两个对象的引用是否相等。类似于使用“==”比较两个对象assertNotSame(unexpected,actual)查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象assertTrue(condition)查看运行结果是否为true。assertFalse(condition)查看运行结果是否为false。assertThat(actual,matcher)查看实际值是否满足指定的条件fail()让测试失败2.2示例1.packagetest;2.3.importstaticorg.hamcrest.CoreMatchers.*;4.importstaticorg.junit.Assert.*;5.6.importjava.util.Arrays;7.8.importorg.hamcrest.core.CombinableMatcher;9.importorg.junit.Test;10.11.publicclassAssertTests{12.13.@Test14.publicvoidtestAssertArrayEquals(){15.byte[]expected=trial.getBytes();16.byte[]actual=trial.getBytes();17.org.junit.Assert.assertArrayEquals(failure-bytearraysnotsame,expected,actual);18.}19.20.@Test21.publicvoidtestAssertEquals(){22.org.junit.Assert.assertEquals(failure-stringsnotsame,5l,5l);23.}24.25.@Test26.publicvoidtestAssertFalse(){27.org.junit.Assert.assertFalse(failure-shouldbefalse,false);28.}29.30.@Test31.publicvoidtestAssertNotNull(){32.org.junit.Assert.assertNotNull(shouldnotbenull,newObject());33.}34.35.@Test36.publicvoidtestAssertNotSame(){37.org.junit.Assert.assertNotSame(shouldnotbesameObject,newObject(),newObject());38.}39.40.@Test41.publicvoidtestAssertNull(){42.org.junit.Assert.assertNull(shouldbenull,null);43.}44.45.@Test46.publicvoidtestAssertSame(){47.IntegeraNumber=Integer.valueOf(768);48.org.junit.Assert.assertSame(shouldbesame,aNumber,aNumber);49.}50.51.//JUnitMatchersassertThat52.@Test53.publicvoidtestAssertThatBothContainsString(){54.org.junit.Assert.assertThat(albumen,both(containsString(a)).and(containsString(b)));55.}56.57.@Test58.publicvoidtestAssertThathasItemsContainsString(){59.org.junit.Assert.assertThat(Arrays.asList(one,two,three),hasItems(one,three));60.}61.62.@Test63.publicvoidtestAssertThatEveryItemContainsString(){64.org.junit.Assert.assertThat(Arrays.asList(newString[]{fun,ban,net}),everyItem(containsString(n)));65.}66.67.//CoreHamcrestMatcherswithassertThat68.@Test69.publicvoidtestAssertThatHamcrestCoreMatchers(){70.assertThat(good,allOf(equalTo(good),startsWith(good)));71.assertThat(good,not(allOf(equalTo(bad),equalTo(good))));72.assertThat(good,anyOf(equalTo(bad),equalTo(good)));73.assertThat(7,not(CombinableMatcher.Integereither(equalTo(3)).or(equalTo(4))));74.assertThat(newObject(),not(sameInstance(newObject())));75.}76.}3、核心——注解3.1说明@Before初始化方法@After释放资源@Test测试方法,在这里可以测试期望异常和超时时间@Ignore忽略的测试方法@BeforeClass针对所有测试,只执行一次,且必须为staticvoid@AfterClass针对所有测试,只执行一次,且必须为staticvoid@RunWith指定测试类使用某个运行器@Parameters指定测试类的测试数据集合@Rule允许灵活添加或重新定义测试类中的每个测试方法的行为@FixMethodOrder指定测试方法的执行顺序3.2执行顺序一个测试类单元测试的执行顺序为:@BeforeClass–@Before–@Test–@After–@AfterClass每一个测试方法的调用顺序为:@Before–@Test–@After3.3示例1.packagetest;2.3.importstaticorg.junit.Assert.*;4.5.importorg.junit.*;6.7.publicclassJDemoTest{8.9.@BeforeClass10.publicstaticvoidsetUpBeforeClass()throwsException{11.System.out.println(inBeforeClass================);12.}13.14.@AfterClass15.publicstaticvoidtearDownAfterClass()throwsException{16.System.out.println(inAfterClass=================);17.}18.19.@Before20.publicvoidbefore(){21.System.out.println(inBefore);22.}23.24.@After25.publicvoidafter(){26.System.out.println(inAfter);27.}28.29.@Test(timeout=10000)30.publicvoidtestadd(){31.JDemoa=newJDemo();32.assertEquals(6,a.add(3,3));33.System.out.println(inTest----Add);34.}35.36.@Test37.publicvoidtestdivision(){38.JDemoa=newJDemo();39.assertEquals(3,a.division(6,2));40.System.out.println(inTest----Division);41.}42.43.@Ignore44.@Test45.publicvoidtest_ignore(){46.JDemoa=newJDemo();47.assertEquals(6,a.add(1,5));48.System.out.println(intest_ignore);49.}50.51.@Test52.publicvoidteest_fail(){53.fail();54.}55.}56.57.classJDemoextendsThread{58.59.intresult;60.61.publicintadd(inta,intb){62.try{63.sleep(1000);64.result=a+b;65.}catch(InterruptedExceptione){66.}67.returnresult;68.}69.70.publicintdivision(inta,intb){71.returnresult=a/b;72.}73.}执行结果:1.inBeforeClass================2.inBefore3.inTest----Add4.inAfter5.inBefore6.inTest----Division7.inAfter8.inAfterClass=================图中左上红框中部分表示Junit运行结果,5个成功(1个忽略),1个错误,1个失败。(注意错误和失败不是一回事,错误说明代码有错误,而失败表示该测试方法测试失败)左下红框中则表示出了各个测试方法的运行状态,可以看到成功、错误、失败、失败各自的图标是不一样的,还可以看到运行时间。右边部分则是异常堆栈,可查看异常信息。4、实例总结4.1参数化测试有时一个测试方法,不同的参数值会产生不同的结果,那么我们为了测试全面,会把多个参数值都写出来并一一断言测试,这样有时难免费时费力,这是我们便可以采用参数化测试来解决这个问题。参数化测试就好比把一个“输入值,期望值”的集合传入给测试方法,达到一次性测试的目的。1.packagetest;2.3.importstaticorg.junit.Assert.*;4.5.importjava.util.Arrays;6.7.importorg.junit.Test;8.importorg.junit.runner.RunWith;9.importorg.junit.
本文标题:junit单元测试
链接地址:https://www.777doc.com/doc-5606435 .html