【问题标题】:Fluent Assertions ShouldBeEquivalentTo always passes with different propertiesFluent Assertions ShouldBeEquivalentTo 总是以不同的属性传递
【发布时间】: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);
        }

这个测试仍然通过,但它不应该失败吗?

【问题讨论】:

    标签: c# fluent-assertions


    【解决方案1】:

    Composite 不会暴露任何 FA 可以遍历的属性,因此它只会查看 Count

    【讨论】:

    • 实现了IEnumerable,是不是应该可以遍历composite?还是我应该以不同的方式进行设置?
    • 您的示例无法编译,所以我无法自己尝试。顺便说一句,您使用的是哪个版本的 FA?
    • 更新了复合类为什么它不能编译(在构造函数中删除了字符串参数)。希望现在可以编译,但由于目前我没有可用的 PC,因此无法测试。根据记忆,我使用的是最新的稳定版 FA
    猜你喜欢
    • 2014-01-08
    • 2015-01-07
    • 2016-08-15
    • 2021-06-08
    • 2016-08-30
    • 2015-04-29
    • 2018-07-23
    • 2016-11-12
    • 2017-06-05
    相关资源
    最近更新 更多