gpt4 book ai didi

c# - 如何在单元测试中比较两个对象?

转载 作者:IT王子 更新时间:2023-10-29 03:55:19 25 4
gpt4 key购买 nike

public class Student
{
public string Name { get; set; }
public int ID { get; set; }
}

...

var st1 = new Student
{
ID = 20,
Name = "ligaoren",
};

var st2 = new Student
{
ID = 20,
Name = "ligaoren",
};

Assert.AreEqual<Student>(st1, st2);// How to Compare two object in Unit test?

如何在 Unitest 中比较两个集合?

最佳答案

您要找的是xUnit Test Patterns中的内容叫做Test-Specific Equality .

虽然您有时可以选择覆盖 Equals 方法,但这可能会导致 Equality Pollution因为您需要测试的实现可能不是一般类型的正确实现。

例如,Domain-Driven Design区分实体值对象,它们具有截然不同的相等语义。

在这种情况下,您可以为相关类型编写自定义比较。

如果您厌倦了这样做,AutoFixture的 Likeness 类提供了通用的特定于测试的相等性。对于您的 Student 类,这将允许您编写如下测试:

[TestMethod]
public void VerifyThatStudentAreEqual()
{
Student st1 = new Student();
st1.ID = 20;
st1.Name = "ligaoren";

Student st2 = new Student();
st2.ID = 20;
st2.Name = "ligaoren";

var expectedStudent = new Likeness<Student, Student>(st1);

Assert.AreEqual(expectedStudent, st2);
}

这不需要您覆盖 Student 上的 Equals。

likeness 执行语义比较,因此它也可以比较两种不同的类型,只要它们在语义上相似即可。

关于c# - 如何在单元测试中比较两个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2046121/

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