【发布时间】:2012-03-17 00:07:54
【问题描述】:
我最近刚刚开始使用 ReSharper,并且正在寻找一种方法来解决我遇到的“类型参数规范是多余的”工具提示/快速修复的特定问题。在编写单元测试时,我一直在使用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);
}
}
【问题讨论】:
-
为什么不为您的单元测试项目禁用它?
-
主要原因是我找不到任何地方可以在每个项目的基础上设置它。我只能找到该功能的一般严重性设置。每个项目的设置在哪里?
-
如果您说 R# 建议删除显式类型参数,并且这样做会导致行为发生变化,那么这是 R# 中的一个错误,应该这样提出。毕竟,如果它的存在导致不同的事情发生,它并不是“多余的”。但是,我不完全确定我可以可视化您的代码...
-
@AakashM 我大约一周前在 ReSharper 论坛上提出了这个问题,但没有得到该社区任何人的单一回复,所以虽然我希望看到这个问题得到解决,但我不确切地看到他们为了这样做而大吃一惊。是的,它确实会导致不同的行为。如果没有泛型,它将双方都视为对象并进行比较。由于强类型版本在编译时失败。
-
而不是论坛(我应该说我从未使用过),如果你有一个简单的复制品,我会直接使用错误跟踪器 - 我自己在那里有 reported a number of issues,等等比目前还没有修复:) 你也可以在那里对问题进行投票,尽管我没有任何直接证据表明投票会影响查看事物的顺序...
标签: c# unit-testing resharper assert resharper-6.0