PEX中的待測代碼是否可以限制爲單一方法?我知道你可以將它約束到程序集和類,但是成員呢?將PEX代碼測試約束爲單一方法?
我基本上是試圖實現以下方法100%的代碼覆蓋率:
public virtual bool GetLastSymbol(string symbolHint, out string symbol)
{
if (symbolHint == null)
{
throw new ArgumentNullException("symbolHint");
}
IEnumerable<string> symbols;
symbol = this.VariableHints.TryGetValue(symbolHint, out symbols) ? symbols.Last() : null;
return symbol != null;
}
以下PUT達到12/15代碼覆蓋率,因爲我只是想試探的可能2 1值可以返回:
found = symbolManager.GetLastSymbol(symbolHint, out symbol);
PexAssert.IsFalse(found);
實現全覆蓋這一說,我需要改變對象的狀態,這樣的方法擊中兩個分支。我可以通過使用工廠方法使用單獨的PUT來設置不同的狀態來滿足這個要求,但是這會讓我得到2個PUT的代碼覆蓋不完整,而不是1個PUT,而且覆蓋範圍很廣。我理解在理論上 2 PUT將有100%的組合覆蓋率,但我需要100%的數字在練習,所以我可以正確設置CI。
因此,要在相同的PUT到達另一分支,我必須下面的代碼追加到2行以上:
symbolManager.CreateSymbol(symbolHint); // Ensure next call returns true.
found = symbolManager.GetLastSymbol(symbolHint, out symbol);
PexAssert.IsTrue(found);
據推測爲GetLastSymbol
方法的代碼覆蓋現在是100%,但是由於我已經介紹了另一種對待測類型的方法調用,代碼覆蓋率現在降至20/29。
如何限制一個PUT來只測量單個方法的代碼覆蓋率?我意識到我可能完全誤解了這個指標,所以請解釋原因,如果是這樣的話:)