MSTEST0038:请勿对值类型使用“Assert.AreSame”或“Assert.AreNotSame”
properties | 值 |
---|---|
规则 ID | MSTEST0038 |
标题 | 请勿对值类型使用“Assert.AreSame”或“Assert.AreNotSame” |
类别 | 使用情况 |
修复是中断修复还是非中断修复 | 非中断 |
默认已启用 | 是 |
默认严重性 | 警告 |
引入版本 | 3.8.0 |
是否存在代码修补程序 | 是 |
原因
对作为值类型的一个或两个参数使用 Assert.AreSame 或 Assert.AreNotSame。
规则说明
Assert.AreSame 和 Assert.AreNotSame 的工作原理是通过 ReferenceEquals
来比较对给定 expected
/notExpected
和实际参数的引用。 因此,当传递某一值类型时,它会被装箱。
如果使用 AreSame
,则断言始终失败。 如果使用 AreNotSame
,则断言始终通过。
对于 AreSame
,断言通过的唯一情况是,两个参数都是可为 null 的值类型,并且它们的值都是 null。 在这种情况下,使用两个单独的 Assert.IsNull
调用更加清晰易读。
如何修复违规行为
使用 Assert.AreEqual
和 Assert.AreNotEqual
,而不是 Assert.AreSame
和 Assert.AreNotSame
。
如果使用 Assert.AreSame
且两个参数都是可为 null 的值类型,并且其值预期为 null,那么根据测试的意图,两个单独的 Assert.IsNull
调用可能比 AreEqual
更合适。
何时禁止显示警告
不禁止显示此规则发出的警告。 忽略此规则将导致断言始终失败或始终通过。