为啥流利的断言失败但断言通过了枚举?
Posted
技术标签:
【中文标题】为啥流利的断言失败但断言通过了枚举?【英文标题】:Why did fluent assertion fail but Assert passed for an enum?为什么流利的断言失败但断言通过了枚举? 【发布时间】:2019-06-03 12:30:24 【问题描述】:我无法找到断言 1 失败但断言 2 通过的原因:
var a = Test.test1;
var b = Test.test1;
a.Should().BeSameAs(b); //1
Assert.Equal(a, b); //2
Test
是一个枚举,如下所示:
enum Test test1, test2
【问题讨论】:
【参考方案1】:Should()
用于 enum
解析为 ObjectAssertions
,它将 enum
组合成 object
。
对于ObjectAssertions
,BeSameAs
的expected
参数也是object
类型。
所以a.Should().BeSameAs(b)
将a
和b
放入两个不同的object
s 中,然后检查这两个对象是否引用了内存中的完全相同相同的对象。
如果你想断言a
和b
是相同的enum
,你应该使用
a.Should().Be(b);
【讨论】:
是的。也许提问者知道与从System.Object
继承的静态方法相同的行为。如果您说var q = ReferenceEquals(a, b);
,那么q
将是false
。两个不同的盒子,内容相同。
@Jeppe,与 ReferenceEquals(a, b) 的比较确实澄清了这个问题。谢谢!以上是关于为啥流利的断言失败但断言通过了枚举?的主要内容,如果未能解决你的问题,请参考以下文章