2013-03-20 49 views
9

我想比较对象的列表,忽略了对象的顺序在列表中,仅对比一些属性中的对象,我目前使用下面的代码来执行这种比较:如何比较使用流利声明的列表?

actual.Should().NotBeNull(); 
actual.Count.Should().Be(expected.Count); 
//compare ignoring order 
foreach (var exp in expected) 
    actual.Should().Contain(act => 
     act.IndividualId.Equals(exp.IndividualId) 
     && act.Email.Equals(exp.Email) 
     && act.FirstName.Equals(exp.FirstName) 
     && act.LastName.Equals(exp.LastName) 
    ); 

但是,这看起来并不理想,因为当出现故障时,您不会从预期值中获得打印件。是否有内置的机制来使用流利的断言执行这种比较?

回答

10

现在不行。我们确实有FA 2.0的新的equivalency assertion语法,但是这也将验证对象是否以正确的顺序出现。对于FA 2.1,我试图支持这一点,但我不确定是否可行。它基本上意味着它必须将集合项目后面的整个对象图形与集合中的每个其他项目的对象图形进行比较。肯定会很慢。

+0

是否有可能比较两个List 类型使用actual.Should()。是否包含(预计)? – BraveNewMath 2014-04-29 17:00:34

+0

是的,你可以做actual.Should()。BeEquivalentTo(expected); – 2014-04-29 18:21:02

+1

灵活性,我们通常每个对象序列化JSON然后用字符串比较,误差输出看起来不错,你永远需要更新你的单元测试,如果有人添加了一个新的属性 – 2014-08-05 08:08:18