Java測試技巧

來源:互聯網
上載者:User

標籤: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測試技巧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.