2015-09-16 100 views
0

我正在使用Pex來分析函數執行。 但是,我注意到沒有看到默認參數。Pex忽略默認參數賦值

這裏是我的意思的例子:

public int bla(int x = 2) 
{ 
    return x * 2; 
} 

當我運行PEX,它生成測試用例int result = bla(0);。 (x = 0
有沒有辦法告訴Pex它還應該嘗試不帶參數地撥打bla((即int result = bla())?

回答

1

IntelliTest/Pex的第一條規則是試圖增加代碼覆蓋率。 如果所有陳述都已被覆蓋,Pex將停止。

有許多方法可以添加一些只有在x = 2時纔會被覆蓋的代碼,例如在測試方法中。這可能是對我工作的最簡單的:

[PexMethod] 
    public int bla([PexAssumeUnderTest]Class1 target, int x) 
    { 
     if(x == 2) 
     { 
      PexAssert.ReachEventually(); 
     } 
     int result = target.bla(x); 
     return result; 
     // TODO: add assertions to method Class1Test.bla(Class1, Int32) 
    } 

的勘探結果窗口應該顯示:

x  result 
    0  0 
    2  4 

我不知道有什麼辦法讓Pex的自動生成測試用例的所有默認參數。

在現實世界的產品代碼中,很有可能在代碼中使用默認值,因此您可能不會經常遇到此問題。

而且,如果您擁有Pex覆蓋的所有代碼路徑,那麼使用默認值還是不重要?

這可能是更重要的測試方法,調用'bla'有和沒有提供值。

+0

你說得對,畢竟它不應該有問題,但是,我可以考慮它可能很重要的情況(代碼更改,不斷變化,錯誤編程等)。 ReachEventually()似乎是一個很好的解決方案 – stklik