2

オブジェクトにgetProperties()メソッドを持つJAVAクラスNoNameがあります。このメソッドは、プロパティの配列を返します。NoNameのインスタンスが2つある場合、assertEqualsを使用して、両方のインスタンスのProperty -Arraysが同じかどうかを確認するにはどうすればよいですか?

_assertEquals(inst.getProperties(), ance.getProrties())_非推奨になっているため、このジョブは実行されません。

また、NoNameクラスはライブラリクラスであるため、 equals()を上書きすることはできません(これまで読んだ限り、この種の問題の通常の解決策のようです)。

前もって感謝します。

4

4 に答える 4

4
assertThat(ob1.getProperties(), 
    IsArrayContainingInOrder.contains(obj2.getProperties));

これは、失敗時の出力がはるかに記述的であるため、アサートを実行するよりも好ましい方法であると私が信じているハムクレストマッチャーを使用しています。

ifの順序は関係ありIsArrayContainingInAnyOrderません。

IsArrayContainingInAnyOrder

于 2012-06-06T12:57:06.540 に答える
1

オブジェクトの内部構造を比較することについて話しているのでequals、クラスのメソッドをオーバーライドするかNoName、その内部で両方のオブジェクトのプロパティの配列を比較することができます。hashCodeただし、その場合は、メソッドにも注意を払う必要があります。

hasSameProperties(NoName obj)または、クラスにヘルパーメソッドを作成し、NoName両方のオブジェクトのプロパティ配列を比較した後、そのメソッドにブールフラグを返すようにすることもできます。次に、JUnitで、メソッドを使用するだけですassertTrue

于 2012-06-06T11:39:46.953 に答える
0
Property[] one = inst.getProperties(), two = ance.getProperties();
assertEquals(one.length, two.length);
for (int i=0; i<one.length; i++) assertEquals("index #" + i, one[i], two[i]);

それは基本的なスクラブを提供します。他のエッジ条件が心配な場合(たとえば、配列がnullの場合や、同じ要素がすべて含まれている限り配列の順序が異なる場合など)、追加の作業が必要になります。 (たとえば、nullチェック、Property実装する場合の並べ替えComparable)。

于 2012-06-06T11:48:59.603 に答える
0

Hamcrest 1.3は、わずかに異なる構文を使用しています。いくつかの例を示します。

import static org.hamcrest.collection.IsArrayContainingInOrder.arrayContaining;

...

@Test
public void inOrder1() {
    assertThat(new String[]{"foo", "bar"}, arrayContaining(equalTo("foo"), equalTo("bar")));
}

@Test(expected =  AssertionError.class)
public void inOrder2() {
    assertThat(new String[]{"bar", "foo"}, arrayContaining(equalTo("foo"), equalTo("bar")));
    // Expected: ["foo", "bar"]
    //      but: item 0: was "bar"
}

@Test(expected =  AssertionError.class)
public void inOrder3() {
    assertThat(new String[]{"foo", "bar", "lux"}, arrayContaining(equalTo("foo"), equalTo("bar")));
    // Expected: ["foo", "bar"] in any order
    //      but: Not matched: "lux"
}

@Test(expected =  AssertionError.class)
public void inOrder4() {
    assertThat(new String[]{"foo", "bar"}, arrayContaining(equalTo("foo"), equalTo("bar"), equalTo("lux")));
    // Expected: ["foo", "bar", "lux"] in any order
    //      but: No item matched: "lux" in ["foo", "bar"]
}
于 2015-10-23T10:20:46.513 に答える