FluentAssertion : 用私有内部对象列表断言对象相等

Posted

技术标签:

【中文标题】FluentAssertion : 用私有内部对象列表断言对象相等【英文标题】:FluentAssertion : Assert object equality with private inner list of object 【发布时间】:2021-02-22 13:07:37 【问题描述】:

我尝试使用 FluentAssertion pass 进行测试,但我得到了著名的“System.InvalidOperationException : No members were found for comparison”,我不知道如何在这个特定的上下文中让它通过。

根比较对象类型有一个私有的内部对象列表(Light),我不知道如何编写 BeEquivalentTo 函数的配置选项对象。

    public class LightDashboard
    
        private List<Light> _innerList;

        public LightDashboard(List<Light> innerList)
        
            _innerList = innerList;
        
   



    public class Light
    
        private bool _value;

        public Light(bool value)
        
            _value = value;
        
    

测试看起来像:

    [Test]
    public void ListWithSameNumberOfElementsButDifferentValuesShouldNotBeEquivalent()
    
        List<Light> sutInnerList = new List<Light>() 
            new Light(true)
        ;
        _sutObject = new LightDashboard(sutInnerList);

        List<Light> expectedInnerList = new List<Light>()
            new Light(false)
        ;
        _expectedObject = new LightDashboard(expectedInnerList);

        _sutObject.Should().NotBeEquivalentTo(_expectedObject);
    

【问题讨论】:

【参考方案1】:

这没有什么魔法。您的属性是private,因此 FluentAssertions 将忽略它们。事实上,在测试中观察对象的内部细节是恕我直言的坏习惯。你应该只断言一个类的可观察行为。

【讨论】:

以上是关于FluentAssertion : 用私有内部对象列表断言对象相等的主要内容,如果未能解决你的问题,请参考以下文章

Python中的面向对象(高级)之私有方法、多继承、多态

各种内部类的总结

内部类

面向对象基础——构造方法私有化对象数组内部类

day09内部类

python面向对象--私有和继承