gpt4 book ai didi

c# - 我可以告诉 FluentAssertions 在使用 BeEquivalentTo 时忽略 Equals 方法吗

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:23 24 4
gpt4 key购买 nike

我有一个简单的类,它有两个属性并覆盖了 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);
}
}

现在我创建了一个简单的测试,其中 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
}

我从文档中了解到,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);
}

最佳答案

您只需要像这样在 EquivalencyAssertionOptions 中为您的类型覆盖相等比较器:

p1.Should().BeEquivalentTo(p2, options => options.ComparingByMembers<Person>())

关于c# - 我可以告诉 FluentAssertions 在使用 BeEquivalentTo 时忽略 Equals 方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57052575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com