我剛剛開始使用ReSharper,並正在尋找一種方法來解決我與「類型參數說明是多餘的」tooltip/quickfix的問題。在編寫單元測試時,我一直在使用Assert.AreEqual<string>(x, y)
,ReSharper將<string>
的用法標記爲冗餘。我希望在單元測試中不會有那樣或那些類似用法的冗餘。有什麼辦法可以禁用這個特定的用例(這可以擴展到其他的斷言)?請注意,由於會在源文件中創建大量噪音,因此我想避免對評論進行壓制。我也不想完全禁用該功能。問題與Resharper的「類型參數是多餘的」和斷言
爲了澄清,我認爲這種特殊情況被錯誤標記的原因是因爲通用的使用會導致assert中的不匹配類型的錯誤在編譯時標記,而不是在測試運行時標記。我想保持這種失敗的早期行爲,但是基本上在我寫的每一個測試中都會擺脫所有額外的噪音。
感謝
編輯:已經有一個關於考試內容將是什麼樣子,所以我提供,是造成ReSharper的檢舉冗餘一個這樣的主張的例子問題。
[TestMethod]
public void ViewModelConstructor_NullProgram_SetsVisibilityToCollapsed()
{
_currentProgram = null; //Set condition under test
var Target = TargetMaker(); //Use shared constructor code in all tests
Assert.AreEqual<System.Windows.Visibility>(System.Windows.Visibility.Collapsed, Target.SectionVisibility);
}
編輯2:下面是ReSharper建議更改之前和之後的示例。這兩段代碼顯示了非常不同的結果。我已經注意到測試函數名稱中的不同行爲。
class ClassUnderTest
{
public string fieldUnderTest { get; set; }
public ClassUnderTest()
{
fieldUnderTest = "New Value";
}
}
[TestClass()]
public class ClassUnderTestTest
{
[TestMethod()]
public void ClassUnderTestConstructorTest_FailsTest()
{
ClassUnderTest target = new ClassUnderTest();
Assert.AreEqual(true, target.fieldUnderTest);
}
[TestMethod()]
public void ClassUnderTestConstructorTest_WontCompile()
{
ClassUnderTest target = new ClassUnderTest();
Assert.AreEqual<string>(true, target.fieldUnderTest);
}
}
爲什麼不只是爲你的單元測試項目禁用它? – 2012-02-27 14:10:40
主要原因是我無法在每個項目的基礎上找到任何地方。我只能找到該功能的一般嚴重性設置。每個項目的設置在哪裏? – 2012-02-27 14:20:23
如果您說R#建議刪除顯式類型參數,並且這樣做會導致行爲改變,那麼這就是R#中的一個錯誤,應該像這樣提升。畢竟,如果它的存在導致不同的事情發生,這並不是「多餘的」。然而,我並不完全確定我可以直觀地看到你的代碼... – AakashM 2012-02-27 16:53:13