標籤:eclips rms clip alt search 變異 運行 gpo null
快速鍵
修改快速鍵 window-》preference-》general-》keys:
尋找引用:ctrl+shift+g
覆蓋測試:alt+shift+E,T
複製一行:ctrl+alt+down
調試運行:alt+shift+D,T
改為:
尋找引用:ctrl+g
覆蓋測試:ctrl+W
複製一行:ctrl+d
調試運行:ctrl+q
概念
變異(數字、傳回值、errMsg)
迴圈用例(BinarySearchTree test2)
容易出現變異的地方(自訂異常)
多個測試案例
用反射(複製對比,Datalog hasCode)
我的測試步驟(代碼最多、私人函數)
使用eclipse代碼模板
半自動化測試:產生隨機資料、記錄隨機資料來跑分支,記錄對應的結果來斷言
bug檢測率
針對特定的應用情境,寫好了測試案例,運行測試案例,發現程式的行為和測試案例中預期的不一致,則稱這個程式出bug了。
行為不一致的具體表現為:傳回值、運算子、條件判斷、數值(引用、數字、字串變化)等。這些在項目升級或者完善的時候容易出現,這時,測試案例就派上用場了,能用於檢測升級後是否出現了bug。
如何檢測測試案例的有效性呢?主要指標是分支(語句)覆蓋率和bug檢測率。以上可見,bug出現在項目升級或者完善時,改動而來的變化,但在實際應用中不可能等到項目升級了才來檢測用例是否有效,有工具可以來類比這些變化,這些變化則稱之為“變異”,將程式輸入,進行變異後,輸出多份代碼。每份代碼都認為出現了bug,因為裡面的部分代碼被工具改動了,即和原來的項目代碼錶現不一致了。用這些變異後的代碼運行測試案例,要求測試案例運行失敗,這樣才算是檢測出bug了,否則都通過的話,則沒檢測出bug。
外掛程式
覆蓋率外掛程式:eclemma
變異外掛程式:http://muclipse.sourceforge.net/site/site.xml
https://sourceforge.net/projects/muclipse/?source=typ_redirect
反射例子
package refExample;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Main { public static void main(String[] args) throws Exception{ Class clazz = A.class; { //調用有參靜態方法 Method f1 = clazz.getDeclaredMethod("f2", new Class[]{int.class}); f1.setAccessible(true); f1.invoke(null, 123); } { //調用無參靜態方法 Method f1 = clazz.getDeclaredMethod("f2", null); f1.setAccessible(true); f1.invoke(null, null); } { //設定靜態屬性 Field field = clazz.getDeclaredField("aa"); field.setAccessible(true); field.set(null, 7); Method f1 = clazz.getDeclaredMethod("f1",null); f1.setAccessible(true); f1.invoke(null, null); } { //設定成員屬性 A a = (A) clazz.newInstance(); Field field = clazz.getDeclaredField("a"); field.setAccessible(true); field.set(a, 99); Method f1 = clazz.getDeclaredMethod("f3",null); f1.setAccessible(true); f1.invoke(a, null); } } }class A{ private static int aa; private static void f1(){ System.out.println(aa); } private static void f2(int a){ System.out.println(a); } private static void f2(){ System.out.println("no p 2 "); } private int a; private void f3(){ System.out.println(a); }}
Java測試技巧