我有一个简单的课程:
public class MyClass()
{
public string Property1 {get;set;}
public string Property2 {get;set;}
}
有没有办法在没有 Equal 方法实现的情况下断言这个类的两个实例是否相等(我猜反射在这里很适合)?我不想仅仅为了测试而实现 Equal)。
我有一个简单的课程:
public class MyClass()
{
public string Property1 {get;set;}
public string Property2 {get;set;}
}
有没有办法在没有 Equal 方法实现的情况下断言这个类的两个实例是否相等(我猜反射在这里很适合)?我不想仅仅为了测试而实现 Equal)。
请参阅官方文档的摘录: https ://fluentassertions.com/introduction
您可以通过按名称比较它们的属性来断言整个对象的相等性。如果属性的类型不同但存在内置转换(通过 Convert 类),这甚至可以工作。例如,考虑某个任意域模型中的 Customer 实体及其 DTO 对应的 CustomerDto。您可以使用以下语法断言 DTO 与实体具有相同的值:
dto.ShouldHave().AllProperties().EqualTo(customer);
只要客户也可以使用 dto 的所有属性,并且它们的值相等或可转换,则断言成功。但是,您可以使用属性表达式排除特定属性,例如 ID 属性:
dto.ShouldHave().AllPropertiesBut(d => d.Id).EqualTo(customer);
这相当于:
dto.ShouldHave().AllProperties().But(d => d.Id).EqualTo(customer);
反过来也是可能的。因此,如果您只想包含两个特定属性,请使用此语法。
dto.ShouldHave().Properties(d => d.Name, d => d.Address).EqualTo(customer);
最后,如果您只想比较两个对象的属性,可以使用 SharedProperties() 方法,如下所示:
dto.ShouldHave().SharedProperties().EqualTo(customer);
显然,您可以使用 But() 方法将其链接起来以排除某些共享属性。
Additionally, you can take structural comparison a level further by including the IncludingNestedObjects property. This will instruct the comparison to compare all (collections of) complex types that the properties of the subject (in this example) refer to. By default, it will assert that the nested properties of the subject match the nested properties of the expected object. However, if you do specify SharedProperties, then it will only compare the equally named properties between the nested objects. For instance:
dto.ShouldHave().SharedProperties().IncludingNestedObjects.EqualTo(customer);