0

System.Drawing.Rectangle など、いくつかのプロパティを持つオブジェクトが与えられた場合、すべてのプロパティの値をアサートし (1 つのプロパティが一致しなくても停止しない)、すべてのプロパティを報告したいと考えました。

私はこのコードを試してみました.

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);
4

3 に答える 3

1

タイプ自体に等価性とオーバーライドをチェックさせたくないToString思いますか?それはそれでうまくいくからです。

1 つのオプションは、同じ目的を達成するために匿名型を使用することです。

Assert.AreEqual(new { X = testX, Y = testY },
                new { croppingRectangle.X, croppingRectangle.Y });

匿名型の動作方法 (EqualsおよびToString自動生成されている) により、これは適切なエラー メッセージ表示し、すべてのプロパティを同時にチェックする必要があります。ただし、各プロパティ タイプのデフォルト チェックであるプロパティごとの等価性チェックに依存しています。

于 2013-09-27T21:28:18.843 に答える
0

四角形が何らかの値オブジェクトである場合、.Equalsメソッドを使用してオブジェクト全体を一度に比較できます。

または、エラーをリストに追加することもできます。

var errors = new List<String>()

if(croppingRectangle.Prop == ExpectedValue) {
    //test
}
else {errors.add("ErrorMessage");}

.... and so on

Assert.IsEqual(errors.Count, 0);
于 2013-09-27T21:28:57.063 に答える