1.一種生成測試用例的方法,其特征在于,包括:
獲取待測函數(shù);
遍歷所述待測函數(shù)中的函數(shù)語句,獲取進入所述待測函數(shù)中任意一個或多個分支時的測試條件;
記錄由各個分支的測試條件構(gòu)成的表達式集合,其中,所述表達式集合中包含的一個表達式用于表征所述待測函數(shù)中對應(yīng)的一個分支的測試用例;
根據(jù)所述表達式集合生成用于測試所述待測函數(shù)的測試用例集合。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述表達式集合生成用于測試所述待測函數(shù)的測試用例集合包括:
將從所述表達式集合中依次讀取到的任意一個表達式作為當前表達式,并對所述當前表達式執(zhí)行以下步驟,以生成所述當前表達式所對應(yīng)的測試用例,直至遍歷完所述表達式集合中的表達式:
獲取所述當前表達式中所涉及的測試條件中的條件變量,其中,所述條件變量包括以下至少之一:可構(gòu)造對象變量、非構(gòu)造對象變量;和
在生成所述當前表達式所對應(yīng)的測試用例的過程中,在所述待測函數(shù)中所述測試條件的條件變量為所述可構(gòu)造對象變量時,直接構(gòu)造所述可構(gòu)造對象變量得到構(gòu)造后的條件變量,并將所述構(gòu)造后的變量作為所述當前表達式所對應(yīng)的測試用例中測試條件的條件變量,以生成所述當前表達式所對應(yīng)的測試用例;和/或,在所述待測函數(shù)中所述測試條件的條件變量為所述非構(gòu)造對象變量時,采用Mock函數(shù)模擬所述非構(gòu)造對象變量得到模擬后的條件變量,并將所述模擬后的條件變量作為所述當前表達式所對應(yīng)的測試用例中測試條件的條件變量,以生成所述當前表達式所對應(yīng)的測試用例;和
將生成的所述當前表達式所對應(yīng)的測試用例存儲在用于測試所述待測函數(shù)的所述測試用例集合中,其中,所述測試用例集合中包括所述表達式集合中每一個表達式所對應(yīng)的測試用例。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,
在所述待測函數(shù)中所述測試條件的條件變量為所述可構(gòu)造對象變量時,直接 構(gòu)造所述可構(gòu)造對象變量得到構(gòu)造后的條件變量包括:在所述待測函數(shù)中所述條件變量所涉及的條件參數(shù)為常量參數(shù)時,直接構(gòu)造所述常量參數(shù),將構(gòu)造后的所述常量參數(shù)作為所述測試用例中測試條件的條件變量的條件參數(shù);
在所述待測函數(shù)中所述測試條件的條件變量為所述非構(gòu)造對象變量時,采用Mock函數(shù)模擬所述非構(gòu)造對象變量得到模擬后的條件變量包括:在所述條件變量所涉及的條件參數(shù)為變量參數(shù)時,通過所述Mock函數(shù)將所述變量參數(shù)模擬為常量參數(shù),將模擬后的常量參數(shù)作為所述測試用例中測試條件的條件變量的條件參數(shù)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述遍歷所述待測函數(shù)中的函數(shù)語句,獲取進入所述待測函數(shù)中任意一個或多個分支時的測試條件時,還包括:
根據(jù)由所述待測函數(shù)獲取到的所述測試條件建立與所述待測函數(shù)相匹配的樹狀結(jié)構(gòu),其中,所述樹狀結(jié)構(gòu)中的每一個路徑節(jié)點存儲一個所述測試條件,所述樹狀結(jié)構(gòu)中作為根節(jié)點的路徑節(jié)點中的所述測試條件與作為子節(jié)點的路徑節(jié)點中的所述測試條件具有嵌套關(guān)系。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述根據(jù)由所述待測函數(shù)獲取到的所述測試條件建立與所述待測函數(shù)相匹配的樹狀結(jié)構(gòu)包括:
依次讀取所述待測函數(shù)中的函數(shù)語句作為當前函數(shù)語句,對所述當前函數(shù)語句執(zhí)行以下步驟,直至讀完所述待測函數(shù)中的全部函數(shù)語句;
判斷所述當前函數(shù)語句中是否包含所述測試條件;
若所述當前函數(shù)語句中包含所述測試條件,則將所述測試條件對應(yīng)存儲到所述樹狀結(jié)構(gòu)中對應(yīng)的路徑節(jié)點中;
獲取下一個函數(shù)語句作為所述當前函數(shù)語句。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述判斷所述當前函數(shù)語句中是否包含所述測試條件包括:
判斷所述當前函數(shù)語句中是否包括用于標識所述測試條件的條件關(guān)鍵字;
若讀取到的所述當前函數(shù)語句中包括所述條件關(guān)鍵字,則判斷出所述當前函數(shù)語句為所述測試條件所在的函數(shù)語句。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述將所述測試條件對應(yīng)存儲到所述樹狀結(jié)構(gòu)中對應(yīng)的路徑節(jié)點中包括:
重復(fù)執(zhí)行以下步驟,直至獲取到所述測試條件在所述樹狀結(jié)構(gòu)中對應(yīng)的所述 路徑節(jié)點:
獲取在所述當前函數(shù)語句之前出現(xiàn)的相鄰的上一個測試條件作為當前歷史測試條件;
判斷所述當前函數(shù)語句中的所述測試條件與所述當前歷史測試條件是否具有所述嵌套關(guān)系;
若所述當前函數(shù)語句中的所述測試條件與所述當前歷史測試條件具有所述嵌套關(guān)系,則將所述當前函數(shù)語句中的所述測試條件存儲到與所述當前歷史測試條件對應(yīng)的所述路徑節(jié)點的子節(jié)點中;
若所述當前函數(shù)語句中的所述測試條件與所述當前歷史測試條件不具有所述嵌套關(guān)系,則判斷所述當前函數(shù)語句中的所述測試條件是否為所述樹狀結(jié)構(gòu)中的所述根節(jié)點;
若所述當前函數(shù)語句中的所述測試條件是所述樹狀結(jié)構(gòu)中的所述根節(jié)點,則將所述當前函數(shù)語句中的所述測試條件存儲到新的樹狀結(jié)構(gòu)的根節(jié)點中;
若所述當前函數(shù)語句中的所述測試條件不是所述樹狀結(jié)構(gòu)中的所述根節(jié)點,則重新獲取在所述當前歷史測試條件之前出現(xiàn)的相鄰的上一個測試條件作為下一個所述當前歷史測試條件。
8.根據(jù)權(quán)利要求4至7中任一項所述的方法,其特征在于,所述記錄由各個分支的測試條件構(gòu)成的表達式集合包括:
讀取從所述樹狀結(jié)構(gòu)的所述根節(jié)點分別到每一個葉子節(jié)點的所述測試條件,其中,所述樹狀結(jié)構(gòu)的所述根節(jié)點到一個所述葉子節(jié)點之間的所有路徑節(jié)點構(gòu)成一個分支的路徑,所述葉子節(jié)點為所述分支的最后一個路徑節(jié)點;
將每一條所述路徑中讀取到的所述測試條件作為與所述路徑對應(yīng)的所述分支的表達式,并存儲到所述待測函數(shù)的所述表達式集合中。
9.一種生成測試用例的裝置,其特征在于,包括:
第一獲取單元,用于獲取待測函數(shù);
第二獲取單元,用于遍歷所述待測函數(shù)中的函數(shù)語句,獲取進入所述待測函數(shù)中任意一個或多個分支時的測試條件;
記錄單元,用于記錄由各個分支的測試條件構(gòu)成的表達式集合,其中,所述表達式集合中包含的一個表達式用于表征所述待測函數(shù)中對應(yīng)的一個分支的測試 用例;
生成單元,用于根據(jù)所述表達式集合生成用于測試所述待測函數(shù)的測試用例集合。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述生成單元包括:
第一處理模塊,用于將從所述表達式集合中依次讀取到的任意一個表達式作為當前表達式,并對所述當前表達式執(zhí)行以下步驟,以生成所述當前表達式所對應(yīng)的測試用例,直至遍歷完所述表達式集合中的表達式:獲取所述當前表達式中所涉及的測試條件中的條件變量,其中,所述條件變量包括以下至少之一:可構(gòu)造對象變量、非構(gòu)造對象變量;和在生成所述當前表達式所對應(yīng)的測試用例的過程中,在所述待測函數(shù)中所述測試條件的條件變量為所述可構(gòu)造對象變量時,直接構(gòu)造所述可構(gòu)造對象變量得到構(gòu)造后的條件變量,并將所述構(gòu)造后的變量作為所述當前表達式所對應(yīng)的測試用例中測試條件的條件變量,以生成所述當前表達式所對應(yīng)的測試用例;和/或,在所述待測函數(shù)中所述測試條件的條件變量為所述非構(gòu)造對象變量時,采用Mock函數(shù)模擬所述非構(gòu)造對象變量得到模擬后的條件變量,并將所述模擬后的條件變量作為所述當前表達式所對應(yīng)的測試用例中測試條件的條件變量,以生成所述當前表達式所對應(yīng)的測試用例;和將生成的所述當前表達式所對應(yīng)的測試用例存儲在用于測試所述待測函數(shù)的所述測試用例集合中,其中,所述測試用例集合中包括所述表達式集合中每一個表達式所對應(yīng)的測試用例。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,
所述第一處理模塊通過以下步驟實現(xiàn)在所述待測函數(shù)中所述測試條件的條件變量為所述可構(gòu)造對象變量時,直接構(gòu)造所述可構(gòu)造對象變量得到構(gòu)造后的條件變量:在所述待測函數(shù)中所述條件變量所涉及的條件參數(shù)為常量參數(shù)時,直接構(gòu)造所述常量參數(shù),將構(gòu)造后的所述常量參數(shù)作為所述測試用例中測試條件的條件變量的條件參數(shù);
所述第一處理模塊通過以下步驟實現(xiàn)在所述待測函數(shù)中所述測試條件的條件變量為所述非構(gòu)造對象變量時,采用Mock函數(shù)模擬所述非構(gòu)造對象變量得到模擬后的條件變量:在所述條件變量所涉及的條件參數(shù)為變量參數(shù)時,通過所述Mock函數(shù)將所述變量參數(shù)模擬為常量參數(shù),將模擬后的常量參數(shù)作為所述測試用例中測試條件的條件變量的條件參數(shù)。
12.根據(jù)權(quán)利要求9所述的裝置,其特征在于,還包括:
建立單元,用于在所述遍歷所述待測函數(shù)中的函數(shù)語句,獲取進入所述待測函數(shù)中任意一個或多個分支時的測試條件時,根據(jù)由所述待測函數(shù)獲取到的所述測試條件建立與所述待測函數(shù)相匹配的樹狀結(jié)構(gòu),其中,所述樹狀結(jié)構(gòu)中的每一個路徑節(jié)點存儲一個所述測試條件,所述樹狀結(jié)構(gòu)中作為根節(jié)點的路徑節(jié)點中的所述測試條件與作為子節(jié)點的路徑節(jié)點中的所述測試條件具有嵌套關(guān)系。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述建立單元包括:
第二處理模塊,用于依次讀取所述待測函數(shù)中的函數(shù)語句作為當前函數(shù)語句,對所述當前函數(shù)語句執(zhí)行以下步驟,直至讀完所述待測函數(shù)中的全部函數(shù)語句;判斷所述當前函數(shù)語句中是否包含所述測試條件;在所述當前函數(shù)語句中包含所述測試條件時,將所述測試條件對應(yīng)存儲到所述樹狀結(jié)構(gòu)中對應(yīng)的路徑節(jié)點中;獲取下一個函數(shù)語句作為所述當前函數(shù)語句。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述第二處理模塊通過以下步驟實現(xiàn)判斷所述當前函數(shù)語句中是否包含所述測試條件包括:
判斷所述當前函數(shù)語句中是否包括用于標識所述測試條件的條件關(guān)鍵字;
若讀取到的所述當前函數(shù)語句中包括所述條件關(guān)鍵字,則判斷出所述當前函數(shù)語句為所述測試條件所在的函數(shù)語句。
15.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述第二處理模塊通過以下步驟實現(xiàn)將所述測試條件對應(yīng)存儲到所述樹狀結(jié)構(gòu)中對應(yīng)的路徑節(jié)點中包括:
重復(fù)執(zhí)行以下步驟,直至獲取到所述測試條件在所述樹狀結(jié)構(gòu)中對應(yīng)的所述路徑節(jié)點:
獲取在所述當前函數(shù)語句之前出現(xiàn)的相鄰的上一個測試條件作為當前歷史測試條件;
判斷所述當前函數(shù)語句中的所述測試條件與所述當前歷史測試條件是否具有所述嵌套關(guān)系;
若所述當前函數(shù)語句中的所述測試條件與所述當前歷史測試條件具有所述嵌套關(guān)系,則將所述當前函數(shù)語句中的所述測試條件存儲到與所述當前歷史測試條件對應(yīng)的所述路徑節(jié)點的子節(jié)點中;
若所述當前函數(shù)語句中的所述測試條件與所述當前歷史測試條件不具有所述嵌套關(guān)系,則判斷所述當前函數(shù)語句中的所述測試條件是否為所述樹狀結(jié)構(gòu)中的 所述根節(jié)點;
若所述當前函數(shù)語句中的所述測試條件是所述樹狀結(jié)構(gòu)中的所述根節(jié)點,則將所述當前函數(shù)語句中的所述測試條件存儲到新的樹狀結(jié)構(gòu)的根節(jié)點中;
若所述當前函數(shù)語句中的所述測試條件不是所述樹狀結(jié)構(gòu)中的所述根節(jié)點,則重新獲取在所述當前歷史測試條件之前出現(xiàn)的相鄰的上一個測試條件作為下一個所述當前歷史測試條件。
16.根據(jù)權(quán)利要求12至15中任一項所述的裝置,其特征在于,所述記錄單元包括:
讀取模塊,用于讀取從所述樹狀結(jié)構(gòu)的所述根節(jié)點分別到每一個葉子節(jié)點的所述測試條件,其中,所述樹狀結(jié)構(gòu)的所述根節(jié)點到一個所述葉子節(jié)點之間的所有路徑節(jié)點構(gòu)成一個分支的路徑,所述葉子節(jié)點為所述分支的最后一個路徑節(jié)點;
記錄模塊,用于將每一條所述路徑中讀取到的所述測試條件作為與所述路徑對應(yīng)的所述分支的表達式,并存儲到所述待測函數(shù)的所述表達式集合中。