问题与Resharper的“类型参数是多余的”和断言

时间:2012-02-27 14:09:28

标签: c# unit-testing resharper assert resharper-6.0

我刚刚开始使用ReSharper,我正在寻找一种解决我所遇到的特殊问题的方法,“Type参数规范是冗余的”工具提示/ quickfix。在编写单元测试时,我一直在使用Assert.AreEqual<string>(x, y),而ReSharper将<string>的使用标记为冗余。我希望在我的单元测试中没有被标记为冗余或者任何类似的用法。有没有办法禁用这个特定的用例(可以扩展到其他断言)?请注意,由于源文件中会产生大量噪音,我想避免使用注释进行抑制。我也不想完全禁用该功能。

为了澄清,我认为这个特殊情况被错误标记的原因是因为泛型的使用导致断言中不匹配类型的错误在编译时被标记,而不是在测试运行时。我想保持这种失败的早期行为,但基本上在我写的所有测试中都会消除所有引起的额外噪音。

由于

编辑:有一个关于测试内容会是什么样子的问题所以我提供了一个这样的断言的例子,它导致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);
    }
}

3 个答案:

答案 0 :(得分:2)

Resharper 6.1引入了设置 - “层”的概念。 Here's a blog-post教你如何设置每个项目设置,这就是你想要的。

答案 1 :(得分:0)

单击冗余部分,然后单击该行的左侧并选择Inspection option for Redundent...。在那里你可以选择一个较低的限制级别,直到你喜欢它。

答案 2 :(得分:0)

您不必为每个Assert.AreEqual实例添加注释。相反,您可以在整个源文件中对此突出显示使用注释。只需在文件的开头添加一个禁用注释,然后在结束时添加一个禁用注释。最低噪音。