以下代碼中的switch語句具有default
子句,該子句是編譯器所需的,並且是一個很好的保護措施,但從不執行。在爲其他事情編寫測試之後,我無法(或應該)測試那一行。我不在乎我沒有在測試中覆蓋該行,但是我的TestDriven.net NCover代碼覆蓋率報告確實顯示了未測試的行,這導致類覆蓋率下降到86%。有沒有辦法讓NCover排除這一行?NCover:從覆蓋範圍中排除不可執行的代碼行
public static class OperandTypeExtensions
{
public static string ToShortName(this OperandType type)
{
#region Contract
Contract.Requires<InvalidEnumArgumentException>(Enum.IsDefined(typeof(OperandType), type));
#endregion
switch (type)
{
case OperandType.None: return "<none>";
case OperandType.Int32: return "i32";
case OperandType.Int64: return "i64";
default:
throw new NotSupportedException();
}
}
}
我的問題是類似this question,但沒有答案在我的具體情況提供幫助。
我不能這樣做,因爲合同會阻止我在OperandType枚舉中未定義的方法中賦予任何值,這是它應該是的。我會得到一個'InvalidEnumArgumentException'並且該行還沒有被覆蓋。 – Virtlink
確切地說,我應該有'默認',作爲保障(如上所述)。合同肯定有一個好處:靜態檢查器可以驗證沒有人試圖在方法中放入一個未定義的值,並且它增加了該類型的文檔。 (沒有在參數上指定'Contract'約束就像使所有參數都是'object'類型)。 – Virtlink
我認爲這是矯枉過正。如果期望'OperandType'的參數,誰會傳遞與您的方法不同的東西? –