01 为什么要用单元测试?
- 开发简单的只有一两个类的项目,当然可用一个 main 方法,来跑起来程序,然后看控制台结果判断对不对。但是一旦项目大了,有几十个包,上百个类,再用 main 方法,显然不合适了
- 不合适一在于:不可能编写上百个main方法
- 不合适二在于:不可能一个一个去运行测试
02 案例入门
- 创建一个java项目
- 创建测试包,按照规范来,否则你就是不入流。
- 编写测试方法,取名为“test测试的方法名”
- 运行Junit Test,选中方法名,run as -> junit test
03 练习 API 中的方法
- assertTrue()
从junit的API中可以看到很多方法,但是其中的assertThat是最重要的一个方法。 - assertThat()
在学习 Maven 的时候,依赖引入了 junit 包,会自动给你导入 hamcrest 这个包,原因是 junit4 要依赖于这个 hamcrest 框架,这里就可以看出来,第二个参数。
可以发现有很多的实现类:
-
assertThat( n, allOf( greaterThan(1), lessThan(15) ) );
assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );
assertThat( n, anything() );
assertThat( str, is( “rjxy” ) );
assertThat( str, not( “rjxy” ) ); -
assertThat( str, containsString( “rjxy” ) );
assertThat( str, endsWith(“rjxy” ) );
assertThat( str, startsWith( “rjxy” ) );
assertThat( n, equalTo( nExpected ) );
assertThat( str, equalToIgnoringCase( “rjxy” ) );
assertThat( str, equalToIgnoringWhiteSpace( “rjxy” ) ); -
assertThat( d, closeTo( 3.0, 0.3 ) );
assertThat( d, greaterThan(3.0) );
assertThat( d, lessThan (10.0) );
assertThat( d, greaterThanOrEqualTo (5.0) );
assertThat( d, lessThanOrEqualTo (16.0) ); -
assertThat( map, hasEntry( “rjxy”, “rjxy” ) );
assertThat( iterable, hasItem ( “rjxy” ) );
assertThat( map, hasKey ( “rjxy” ) );
assertThat( map, hasValue ( “rjxy” ) );
04 annotion的使用
- @Test: 测试方法
a)(expected=XXException.class)
b)(timeout=xxx) - @Ignore: 被忽略的测试方法
- @Before: 每一个测试方法之前运行
- @After: 每一个测试方法之后运行
- @BeforeClass: 所有测试开始之前运行
- @AfterClass: 所有测试结束之后运行