[英]Fluent Assertions - Overriding comparison in ShouldBeEquivalentTo()
[英]Fluent Assertions ShouldBeEquivalentTo always passes with different properties
我创建了一个简单的复合模式,其组件定义为
public abstract class Component : IEnumerable<Component>
{
protected EntityComponent(int id)
{
Id = id;
}
public int Id { get; protected set; }
public abstract IEnumerator<EntityComponent> GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
及其组合实现为
public class Composite : Component
{
private readonly IList<Component> childComponents = new List<Component>();
public Composite(int id)
: base(id)
{
}
public int Count { get; set; }
public void Add(Component child)
{
childComponents.Add(child);
Count++;
}
public override IEnumerator<Component> GetEnumerator()
{
foreach (var childComponent in childComponents)
{
yield return childComponent;
foreach (var component in childComponent)
{
yield return component;
}
}
}
}
现在,我使用Fluent断言设置一些测试,以断言两个复合结构是否等效,例如,
[Fact]
public void TestAssertions()
{
var a1 = new Composite(1);
var a2 = new Composite(2);
a1.Add(a2);
var b1 = new Composite(1);
var b2 = new Composite(2);
b1.Add(b2);
a1.ShouldBeEquivalentTo(b1);
}
该测试符合预期。 但是,如果我更改一种复合材料的特性之一,即
[Fact]
public void TestAssertions()
{
var a1 = new Composite(1);
var a2 = new Composite(2);
a1.Add(a2);
var b1 = new Composite(101);
var b2 = new Composite(2);
b1.Add(b2);
a1.ShouldBeEquivalentTo(b1);
}
该测试仍然通过,但不应该失败吗?
Composite
没有公开FA可以遍历的任何属性,因此它只会查看Count
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.