Joh*_*eer 5 c# fluent-assertions
我有一个简单的类,它有两个属性并覆盖了 Equals 方法:
public class Person : IEquatable<Person>
{
public Guid Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
return this.Equals(obj as Person);
}
public bool Equals(Person other)
{
return other != null &&
this.Id.Equals(other.Id);
}
public override int GetHashCode()
{
return 2108858624 + EqualityComparer<Guid>.Default.GetHashCode(this.Id);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我创建了一个简单的测试,其中的Id值相同,但Name值不同。
[Fact]
public void PersonShouldNotBeEqual()
{
var guid = Guid.NewGuid();
var p1 = new Person { Id = guid, Name = "Me" };
var p2 = new Person { Id = guid, Name = "You" };
p1.Should().NotBeEquivalentTo(p2); // Fails
}
Run Code Online (Sandbox Code Playgroud)
我从文档中了解到,当它在类中被覆盖时,默认情况下BeEquivalentTo()使用该Equals()方法,但我还没有找到一种方法来否决它,因此实例通过它们的属性值进行比较。
除了下面的方法之外,是否可以在 FluentAssertions 中做到这一点?
[Fact]
public void PersonShouldBeEqual()
{
var guid = Guid.NewGuid();
var p1 = new Person { Id = guid, Name = "Me" };
var p2 = new Person { Id = guid, Name = "You" };
p1.Id.Should().Be(p2.Id);
p1.Name.Should().Be(p2.Name);
}
Run Code Online (Sandbox Code Playgroud)
Psi*_*ter 11
您只需要在 EquivalencyAssertionOptions 中为您的类型覆盖相等比较器,如下所示:
p1.Should().BeEquivalentTo(p2, options => options.ComparingByMembers<Person>())
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |