【发布时间】:2020-06-09 06:02:19
【问题描述】:
我在尝试让 Should().BeEquivalentTo() 处理从基类派生的类型并实现集合接口时遇到问题:
public class Entity
{
public string Id {get; set;}
public string Name {get; set;}
}
public class Derived : Entity, ICollection<Entity>
{
private List<Entity> m_Children = new List<Entity>();
public string Description { get; set; }
public int Count => ((ICollection<Entity>)m_Children).Count;
public bool IsReadOnly => ((ICollection<Entity>)m_Children).IsReadOnly;
public void Add(Entity item)
{
((ICollection<Entity>)m_Children).Add(item);
}
public void Clear()
{
((ICollection<Entity>)m_Children).Clear();
}
public bool Contains(Entity item)
{
return ((ICollection<Entity>)m_Children).Contains(item);
}
public void CopyTo(Entity[] array, int arrayIndex)
{
((ICollection<Entity>)m_Children).CopyTo(array, arrayIndex);
}
public IEnumerator<Entity> GetEnumerator()
{
return ((ICollection<Entity>)m_Children).GetEnumerator();
}
public bool Remove(Entity item)
{
return ((ICollection<Entity>)m_Children).Remove(item);
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((ICollection<Entity>)m_Children).GetEnumerator();
}
}
测试
[TestMethod]
public void EquivalenceTest()
{
var expected = new Derived
{
Id = "123",
Name = "abc",
Description = "def"
};
var actual = new Derived
{
Id = "121",
Name = "xyz",
Description = "def"
};
actual.Should().BeEquivalentTo(expected); // This succeeds, but should fail
}
对 BeEquivalentTo 的调用似乎忽略了对象中定义的属性,只将对象视为集合。
如何让框架检查集合的属性和内容?
编辑 好像是a known issue
有人知道解决方法吗?
【问题讨论】:
-
actualChild定义在哪里? -
道歉 - 剪切和粘贴错误。我现在已经编辑了原始帖子。
-
还是有问题 -
Derived在声明中有错字(冒号但没有基本类型)。 -
这似乎是一个已知问题 - 我添加了一个链接。但是有人知道解决方法吗?
标签: c# fluent-assertions