c# - 为什么 Assert.AreEqual<T> 因相同的对象而失败?

标签 c# assert

我有一个包含这些属性的类:

public class Person
{
    public long Id { get; set; }

    public string Name { get; set; }

    public int? IdCountry { get; set; }
    public virtual Country Country { get; set; }
    public int? IdState { get; set; }
    public virtual State State { get; set; }
}

public class Country
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class State
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int IdCountry { get; set; }
    public virtual Country Country { get; set; }
}

在单元测试中,我创建了 2 个具有相同值的对象

Person expected = new Person()
{
    Name = "blablablbla",
    Id = 1
};
Person actual = PessoaFactory.Create(Name: "blablablbla", Id: 1);
Assert.AreEqual<Person>(expected, actual);

但是 Assert.AreEqual 抛出异常。

最佳答案

您需要覆盖 Equals 来比较对象。默认实现比较引用,而不是值。查看MSDN documentation .

关于c# - 为什么 Assert.AreEqual<T> 因相同的对象而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072881/

相关文章:

c++ - 如何在 Debug模式下绕过单元测试中的断言?

c# - nUnit 下的 Contains 中不区分大小写的比较

python 在没有 shell 的情况下使用 popen,或使用断言来提高安全性

c# - MySql.Data,无法解析,因为它是针对另一个版本构建的

c# - WPF/C# - 以编程方式创建和使用单选按钮的示例

c# - 统一引擎 : Which component called a running script?

c# - 用 Xunit 比较两个列表

c# - 为什么 Assert.AreEqual() 在比较之前转换为对象?

c# - 如何在 C# 中获取一个对象的多个子项的枚举器?

c# - System.Concurrency.AsyncLock 有什么作用?