繁体   English   中英

C#单元测试中的简单易读方法,可在断言相等性失败时仅显示对象之间的差异

[英]Simple and readable way in C# Unit Testing to show only differences between objects when assert equality fails

我有一种方法可以测试更改POCO布局对象状态的单元:

    [TestMethod]
    public void A_Test_Method()
    {
        // Arrange
        const double adjustmentValue = 50;

        var expectedLayout = CreateDefaultLayout();
        ... // set some values

        var actualLayout = CreateDefaultLayout();
        ...

        var runtimeHelper = new LayoutRuntimeHelper(actualLayout);

        // Act

        runtimeHelper.SetPrintVerticalAdjustment(actualLayout.Print.VerticalAdjustment.Orientation, adjustmentValue);

        // Assert

        Assert.AreEqual(expectedLayout, actualLayout);
    }

注意:ToString()方法被覆盖,因此它打印像JSON这样的整个对象,而不仅仅是类型。 Equals()也会发生同样的情况。

问题在于布局对象仅仅是个大对象,因此测试输出也变得很大,我必须找出这些对象之间的差异。 那么,如何告诉测试框架仅输出差异?

感谢Mike Zboray的评论,FluentAssertions Nuget软件包使其完美。 不得不替换为:

Assert.AreEqual(expectedLayout, actualLayout);

对此:

actualLayout.Should().BeEquivalentTo(expectedLayout);

测试输出:

Expected member Image.VerticalPositionAbsoluteMm to be 550.0, but found 650.0.
Expected member Print.VerticalPositionAbsoluteMm to be 550.0, but found 650.0.
Expected member Print.VerticalAdjustment.Orientation to be -1M, but found 1M.

With configuration:
- Use declared types and members
- Compare enums by value
- Match member by name (or throw)
- Without automatic conversion.
- Be strict about the order of items in byte arrays

... (Exception Stacktrace)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM