MSTEST0038:请勿对值类型使用“Assert.AreSame”或“Assert.AreNotSame”

properties
规则 ID MSTEST0038
标题 请勿对值类型使用“Assert.AreSame”或“Assert.AreNotSame”
类别 使用情况
修复是中断修复还是非中断修复 非中断
默认已启用
默认严重性 警告
引入版本 3.8.0
是否存在代码修补程序

原因

对作为值类型的一个或两个参数使用 Assert.AreSameAssert.AreNotSame

规则说明

Assert.AreSameAssert.AreNotSame 的工作原理是通过 ReferenceEquals 来比较对给定 expected/notExpected 和实际参数的引用。 因此,当传递某一值类型时,它会被装箱

如果使用 AreSame,则断言始终失败。 如果使用 AreNotSame,则断言始终通过。

对于 AreSame,断言通过的唯一情况是,两个参数都是可为 null 的值类型,并且它们的值都是 null。 在这种情况下,使用两个单独的 Assert.IsNull 调用更加清晰易读。

如何修复违规行为

使用 Assert.AreEqualAssert.AreNotEqual,而不是 Assert.AreSameAssert.AreNotSame。 如果使用 Assert.AreSame 且两个参数都是可为 null 的值类型,并且其值预期为 null,那么根据测试的意图,两个单独的 Assert.IsNull 调用可能比 AreEqual更合适。

何时禁止显示警告

不禁止显示此规则发出的警告。 忽略此规则将导致断言始终失败或始终通过。