Fluent Assertions ShouldBeEquivalentTo 总是以不同的属性传递
Posted
技术标签:
【中文标题】Fluent Assertions ShouldBeEquivalentTo 总是以不同的属性传递【英文标题】:Fluent Assertions ShouldBeEquivalentTo always passes with different properties 【发布时间】:2018-02-22 00:02:20 【问题描述】:我创建了一个简单的复合模式,其组件定义为
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 Assertions 设置一些测试来断言两个复合结构是否等价,例如,
[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);
这个测试仍然通过,但它不应该失败吗?
【问题讨论】:
【参考方案1】:Composite
不会暴露任何 FA 可以遍历的属性,因此它只会查看 Count
。
【讨论】:
实现了IEnumerable,是不是应该可以遍历composite?还是我应该以不同的方式进行设置? 您的示例无法编译,所以我无法自己尝试。顺便说一句,您使用的是哪个版本的 FA? 更新了复合类为什么它不能编译(在构造函数中删除了字符串参数)。希望现在可以编译,但由于目前我没有可用的 PC,因此无法测试。根据记忆,我使用的是最新的稳定版 FA以上是关于Fluent Assertions ShouldBeEquivalentTo 总是以不同的属性传递的主要内容,如果未能解决你的问题,请参考以下文章
Fluent Assertions Should().BeEquivalentTo 只有私有字段
Fluent Assertions ShouldBeEquivalentTo 总是以不同的属性传递
Fluent Assertions:大致比较两个 2D 矩形阵列