给定一个具有多个属性的对象,比如System.Drawing.Rectangle,我想断言所有属性的值(当ONE属性不匹配时不停止)并报告所有属性。
我试过这段代码,希望它可以做我想要的......
System.Drawing.Rectangle croppingRectangle = SomeMethodReturnsRectangle(testP1,testP2);
Assert.That(()=>{ croppingRectangle.X==testX && croppingRectangle.Y==testY },"expected X={0}, Y={1} but was X={2},Y={3}", testX,testY,croppingRectangle.X,croppingRectangle.Y);
NUnit的正确方法是什么?
(我意识到这有效:)
if(croppingRectangle.X==testX && croppingRectangle.Y==testY) {
Assert.Pass();
else
Assert.Fail("expected X={0}, Y={1} but was X={2},Y={3}", testX,testY,croppingRectangle.X,croppingRectangle.Y);
答案 0 :(得分:1)
我假设你不想让类型本身检查相等并覆盖ToString
?因为那样做会很好。
一种选择是使用匿名类型来实现相同的目标:
Assert.AreEqual(new { X = testX, Y = testY },
new { croppingRectangle.X, croppingRectangle.Y });
由于匿名类型的工作方式(Equals
和ToString
自动生成),这应该会给您一个很好的错误消息和同时检查所有属性。它确实依赖于每个属性的相等性检查是每个属性类型的默认检查。
答案 1 :(得分:0)
如果你的矩形是某种值对象,你可以依靠.Equals
方法一次比较整个对象。
或者,您可以将错误附加到列表中。
var errors = new List<String>()
if(croppingRectangle.Prop == ExpectedValue) {
//test
}
else {errors.add("ErrorMessage");}
.... and so on
Assert.IsEqual(errors.Count, 0);
答案 2 :(得分:0)
或者您使用Fluent Assertions来验证您的对象是否包含包含预期属性和值的匿名对象。见http://www.dennisdoomen.net/2012/09/asserting-object-graph-equivalence.html