为什么流利的断言失败但断言传递给枚举?

Yit*_*tuo 2 c# assertion fluent-assertions

我无法找到断言1失败但断言2通过的原因:

var a = Test.test1;
var b = Test.test1;
a.Should().BeSameAs(b); //1
Assert.Equal(a, b);     //2
Run Code Online (Sandbox Code Playgroud)

Test 是一个像下面的枚举:

enum Test { test1, test2 }
Run Code Online (Sandbox Code Playgroud)

Jon*_*rup 6

Should()为了enum解决ObjectAssertions哪些盒子enum进入object.对于ObjectAssertions所述expected的参数BeSameAs的类型的也object.

所以a.Should().BeSameAs(b)ab两个不同的objects然后检查那两个对象是指内存中完全相同的对象.

如果你想断言a并且b是相同的enum,你应该使用

a.Should().Be(b);
Run Code Online (Sandbox Code Playgroud)

  • 是.也许提问者知道从`System.Object`继承的静态方法的相同行为.如果你说`var q = ReferenceEquals(a,b);`那么`q`将是'false`.两个不同的盒子具有相同的内容. (2认同)