1
我創建了一個簡單的組合模式被定義爲流利斷言ShouldBeEquivalentTo總是具有不同的屬性
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);
}
此測試仍然通過,但不應該失敗嗎?
它不應該能夠遍歷複合,因爲它實現了IEnumerable?或者我應該以不同的方式設置它? –
你的例子不能編譯,所以我不能自己嘗試。順便說一句,你正在使用哪個版本的FA? –
已更新的組合類,以便它可能無法編譯(構造函數中已刪除的字符串參數)。希望能夠現在編譯,但目前無法測試,因爲沒有可用的PC。從記憶中,我使用了FA的最新穩定版本 –