C# Assert.Equal(book, book1) 失败,即使两个对象相等



下面是我的单元测试项目。我创建了一个单元测试,它将测试两个对象的相等性。对象是通过引用方法GetbookSetName传递的。GetbookSetName负责创建一个新的图书对象,并为图书指定新名称。

using Programme;
using Xunit;
using System;
namespace XUnitTestProject1
{
public class BookTests
{
[Fact]
public void CsharpIsPassbyref()
{   
// Get book will return new book object and assigned to book1
var book1 = GetBook("book1");
//getbookSetName method accepts book object as reference parameter and book name.
GetbookSetName(ref book1, "New Book");
}
private void GetbookSetName(ref Book book, string name)
{
book = new Book(name);
var book1 = new Book(name);
Assert.Equal(book, book1);
}
Book GetBook(string name)
{
return new Book(name);
}
}
}

下面是图书课。它有一个构造函数,用它的名字初始化书。

public class Book
{
public string Name;

public Book(string name)
{
Name = name;
}
}

错误:

Assert.Equal((失败
预期:Book{Name="New Book}

堆栈跟踪:
BookTests.GetbookSetName(Book&Book,字符串名称(第55行
BookTests.CsharpIsPassbyref((第47行

代码比较唯一指针并断言它们相等,这将始终为false。

p

ublic class BookTests
{
[Fact]
public void CsharpIsPassbyref()
{   
// Get book will return new book object and assigned to book1
var book1 = GetBook("book1");  // <<< instance A
//getbookSetName method accepts book object as reference parameter and book name.
GetbookSetName(ref book1, "New Book"); // << passing instance A to func
}
private void GetbookSetName(ref Book book, string name)
{
book = new Book(name);  // <<< overwrite instance A with instance B
var book1 = new Book(name); // <<< new instance C
Assert.Equal(book, book1);  // <<< comparing addresses of instance B to instance C
}
Book GetBook(string name)
{
return new Book(name);
}

如果代码打算比较包含相同内部状态的对象,则重写Equals((方法或==运算符来比较各个成员变量值。

引用相等和两个对象的相等是不同的。参见:这个问题

Assert.equals用于参考相等性检查。它总是返回false。请参阅:MS文档。bookbook1可能是具有相同属性值的对象,但它们是两个不同的对象,因此不会传递断言。

要检查相等性而不是参考相等性,请使用Assert.AreEqual

我遇到了这个问题,并最终覆盖了类中的Equals方法,该方法检查两个对象中的每个属性以查看它们是否相等:

public override bool Equals(object obj)
{
return GetType().GetProperties().All(property => property.GetValue(this) == property.GetValue(obj));
}

相关内容

  • 没有找到相关文章

最新更新