[英]assertThat field by field or compare object
我正在和我的朋友爭論,我想知道你的意見。
在測試中,您認為是逐個字段比較還是僅創建一個 expectedResultObject 並進行比較更好。
例如:
Assert.That(obj.Foo).isEqualTo(FOO);
Assert.That(obj.Test).isEqualTo(TEST);
對比
Foo expected = new Foo(FOO, TEST);
assertThat(obj).usingRecursiveComparison().isEqualTo(expected);
在這個例子中,我們只有兩個字段,但我們可以分配更多。
謝謝
如果您可以有多個字段,那么預期的方法會更好,因為您將在構造函數的參數中添加其他字段。 想象一下,如果您有 100 個字段,按照您在第一個示例中的建議逐行添加它們會令人頭疼,而添加參數會更簡單一些。
在這兩種可能性之間,我更喜歡沒有 usingRecursiveComparison() 的一種。
我想添加一些細項:
有一種技術可以使斷言更加可靠(使用 AssertJ,但我認為您可以使用 Hamcrest 實現這種功能)。
初始類:
public class Amount {
private int value;
public Integer add(int amountToAdd) {
value += amountToAdd;
return value;
}
}
創建斷言者:
public class IntegerAsserter extends org.assertj.core.api.AbstractAssert<IntegerAsserter, Integer> {
IntegerAsserter(Integer actual) {
super(IntegerAsserter.class, actual);
}
public IntegerAsserter isBetweenOneOrTwo() {
Assert.assertTrue(actual < 2);
Assert.assertTrue(actual > 1);
return this;
}
}
創建一個新的斷言:
public class Assertions extends org.fest.assertions.Assertions {
public static IntegerAsserter assertThat(Integer actual) {
return new IntegerAsserter(actual);
}
}
然后使用它:
public void should_be_between_one_or_two {
Amount amount = new Amount(0);
Integer newAmount = amount.add(1);
Assertions.assertThat(obj).isBetweenOneOrTwo();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.