![](/img/trans.png)
[英]C# ValidationResult value equality assertion fails with Assert.AreEqual
[英]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.