0

このメソッドを使用して作成された Object とその複製が等しいことを示すために、 other で次のメソッドのテストを作成する宿題があります。

   /**
 * Creates a new object that is a duplicate of this instance of
 * Parameter.
 * <p>
 * The duplication is a "deep copy" in that all values contained in the
 * Parameter are themselves duplicated.
 * 
 * @return The new duplicate Parameter object.
 */
public Parameter copy( )
{
    Parameter result = new Parameter( );
    result.setName( getName( ) );
    for ( int index = 0; index < getNumberOfValues( ); index++ )
    {
        result.addValue( getValue( index ).copy( ) );
    }
    return result;
 }

私はさまざまな方法を書きましたが、結果は毎回それらが等しくないことを示しています。私のテストの1つ:

@Test
public void testCopy() {
    Parameter param = new Parameter();
    Value val1 = new Value();
    //val1.setName("Hi!");
    //param.addValue(val1);

    Parameter param2 = param.copy();
    Parameter expected = param;
    Parameter actual = param2;

    assertEquals(param, param2);
}

しかし、この方法では、param の正確な複製が作成されないようです。案内していただけますか?

そして、これは値のコピー方法です:

   /**
 * Creates a new Value object that is a duplicate of this instance.
 * 
 * @return The new duplicate Value object.
 */
public Value copy( )
{
    Value newValue = new Value( );
    newValue.setName( getName( ) );
    return newValue;
}
4

2 に答える 2

2

Parameter クラスには equals method() が必要です。このJavaがないと、参照に基づいて等価が実行されます( Object.equals() のデフォルトの動作)。したがって、あなたの観察です。

equals メソッドは次のようになります。

public boolean equals(Object o)
{
    Parameter p = (Parameter)o;
    return this.getName().equals(p.getNames) && this.getNumberOfValues() == p.getNumberOfValues() &&B this.values().equals(p.values());
}
于 2012-07-31T16:53:27.063 に答える
0

クラスのequalsメソッドObjectここで説明)は、trueを返すために、参照が同じオブジェクトを参照する必要があることを明確に示しています。あなたの場合、copyメソッドは、コピーオブジェクトを作成するために、新しいパラメータを正しく作成し、その後、新しい値を作成します。したがって、既存のequals()メソッドは常にfalseを返します。

正しくテストするには、コメントに記載されていることを実行する必要があります。つまり、ParameterクラスとValueクラスの両方でObjectクラスの既存のメソッドをオーバーライドする新しいequals()メソッドを作成する必要があります。メソッドは、各オブジェクトのコンテンツ(各オブジェクトの名前)が同じであるかどうか、またはアプリケーションに応じて適切と見なされるその他のセマンティクスであるかどうかをテストする必要があります。

于 2012-07-31T17:02:10.937 に答える