什麼是單元測試
寫了個類,要給别人用,會不會有bug?怎麼辦?測試一下。
用main方法測試好不好?不好!
不能一起運作!
大多數情況下需要人為的觀察輸出确定是否正确
為什麼要進行單元測試
重用測試,應付将來的實作的變化。
提高士氣,明确知道我的東西是沒問題的。
junit4 helloworld
new project
建立類
建立testcase
assertthat
使用hamcrest的比對方法
放棄舊的斷言,使用hamcrest斷言
a) 更自然
示例
a) assertthat( n, allof( greaterthan(1), lessthan(15) ) );
assertthat( n, anyof( greaterthan(16), lessthan(8) ) );
assertthat( n, anything() );
assertthat( str, is( "bjsxt" ) );
assertthat( str, not( "bjxxt" ) );
b) assertthat( str, containsstring( "bjsxt" ) );
assertthat( str, endswith("bjsxt" ) );
assertthat( str, startswith( "bjsxt" ) );
assertthat( n, equalto( nexpected ) );
assertthat( str, equaltoignoringcase( "bjsxt" ) );
assertthat( str, equaltoignoringwhitespace( "bjsxt" ) );
c) 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) );
d) assertthat( map, hasentry( "bjsxt", "bjsxt" ) );
assertthat( iterable, hasitem ( "bjsxt" ) );
assertthat( map, haskey ( "bjsxt" ) );
assertthat( map, hasvalue ( "bjsxt" ) );
failure和error
failure是指測試失敗
error是指測試程式本身出錯
@test: 測試方法
junit4 annotation
a) (expected=xxexception.class)
b) (timeout=xxx)
@ignore: 被忽略的測試方法
@before: 每一個測試方法之前運作
@after: 每一個測試方法之後運作
@beforeclass: 所有測試開始之前運作
@afterclass: 所有測試結束之後運作
遵守約定,比如:
運作多個測試
注意
a) 類放在test包中
b) 類名用xxxtest結尾
c) 方法用testmethod命名
其他架構
testng