2016-12-26 35 views
0

可以強制Pex/Intellitest尋找任何可能的路徑條件?我需要pex向我展示那些PC。在pexfonfun/visualstudio 2015中,我只能看到幾臺PC。例如,不可行的PC沒有顯示。Pex:如何獲取所有路徑條件(PC)?

在下面的例子中我得到3 PC:

1) i != 12 && i != 15; 
2) i == 15; 
3) i == 12; 

public static int foo(int i){ 
    int a = 1; 
    if(i == 12) 
     a = 1; 
    if(i == 15) 
     a = 2; 
    return a; 
} 

爲什麼我不明白 「I = 12 & &我== 15!」?

謝謝! :)

回答

1

>>爲什麼我沒有「我!= 12 & & i == 15」?

IntelliTest嘗試生成高覆蓋率的緊湊測試套件。 對於您的示例,請注意,這3臺PC足以覆蓋代碼中的所有塊。因此,IntelliTest決定現在可以停止。 下面是從IntelliTest參考手冊一些相關的部分,這進一步解釋:

  1. 要查看IntelliTest如何生成的數據,請看這裏:https://www.visualstudio.com/en-us/docs/test/developer-testing/intellitest-manual/input-generation
  2. 時看到IntelliTest決定發出一個測試用例,請請看這裏:https://www.visualstudio.com/en-us/docs/test/developer-testing/intellitest-manual/test-generation

請讓我知道我們該如何改進本手冊。 OK,現在已經說了,你可以用IntelliTest來生成所有的PC(儘管它不會執行任何新的代碼路徑)。 這裏是如何做到這一點:

  1. 做你的方法「運行IntelliTest」。
  2. 從「探索結果」窗口中選擇所有測試,然後點擊保存按鈕。請注意,將創建一個新的測試項目。
  3. 在此測試項目中找到PUT - 它將是具有PexMethod屬性的方法。
  4. 條件IntelliTest產生更多的PC,並通過更新PexMethod屬性如下發射測試: [PexMethod(TestEmissionFilter = Microsoft.Pex.Framework.Settings.PexTestEmissionFilter.All)]
  5. 現在,無論是在PUT或在產品上的方法做一個「運行IntelliTest」又來了,你應該可以看到更多的個人電腦(以「重複路徑」作爲摘要消息)。根據您的喜好嘗試EmissionFilter設置。
+0

太棒了!非常感謝! :) – Kirito

+0

我看到你對此知道很多,你知道pex爲什麼在PC中生成這個表達式嗎?返回(4294967294u | 1u ^(var.hasValue?(byte)1:(byte)0))== uint.MaxValue;這發生在一個「var」作爲int的aritmetic操作中?變量。示例(var int *類型):** int? ret = 0; ret + = var;返回0; ** – Kirito

+0

可以請你分享完整的方法體?我可以看看。 – pvlakshm

相關問題