assertArrayEquals見つけることができないが(オブジェクト[] O1、[] O2の物体)

StackOverflow https://stackoverflow.com/questions/1552893

  •  20-09-2019
  •  | 
  •  

質問

私のセットアップ:

  Netbeans 6.7
  Java6
  JUnit 4.5 added as the Test libraries

私は([]オブジェクトとしてキャスト)私はエラーを取得する2つのクラスの配列を渡すしようとすると、「シンボルを見つけることができない」と私のテストケースがコンパイルされません。

私は他のassert文の問題を持っていない、と私が言ったように私はJUnitの4.5ライブラリを使用しています。

誰もがこの問題を解決するか、この風変わりな振る舞いを観察する方法についての手掛かりを持っていますか?

Netbeansのは、オートコンプリートを介してこの機能宣言を見つけることができるが、それが位置される場所を見つけることができない、またはソースに移動することができます。

サンプルコード:

CustomObject[] coa = { new CustomObject() ....}
CustomObject[] expected = { new CustomObject() ... } 
assertArrayEquals((Object[])coa, (Object[])expected);
役に立ちましたか?

解決

あなたが働いているあなたのコードから見ることができるように

さて、Assert.assertArrayEqualsは、静的メソッドです。

 org.junit.Assert.assertArrayEquals(....)

しかし、あなたが与えられたコードで、あなたはインスタンスメソッドとしてそれを使用しようとしていた。

 assertArrayEquals((Object[])coa, (Object[])expected);

あなたは静的にAssert.*またはAssert.assertArrayEqualsをインポートしたい場合はそれだけに働くだろう。

あなたの他のアサーションが作業している場合は、

さて、私のの推測のは、あなたはまだ(JUnitテストを書くのすなわち「古い」方法)TestCaseから派生していることと、あなたのアサーションがTestCase.assertEqualsなどを呼び出しているということですます。

あなたは短いがを与えることができる場合は、の完全なのユニットテストの例ところ1点のアサーションの作品が、assertArrayEquals、我々はおそらく何が起こっているのかうまくできません。

他のヒント

あなたは完全にアサーションを修飾または配列オブジェクトにあなたの配列をキャストする必要はありません。ただ、JUnitのの適切な部品を輸入し、直接あなたの配列を渡します。あなたはしかし、あなたの例からパラメータの順序を逆にする必要があり - 何を期待することは、あなたが実際の試験から得られるもの(「expecteds」)、第二来て(「実績」)最初に来ます。これは正常に動作します:

import org.junit.*;
import static org.junit.Assert.*;

public class TestJUnitActuallyWorks {

    @Test
    public void myArraysShouldBeIdentical() {

        CustomObject one = new CustomObject();
        CustomObject two = new CustomObject();
        CustomObject three = new CustomObject();

        CustomObject[] expecteds = { one, two, three };
        CustomObject[] actuals = { one, two, three };
        assertArrayEquals(expecteds, actuals);
    }

    private static class CustomObject {}
}

問題は、コンパイラが実際のクラスに見て拒否されたということでした..しかし、それはabosulteパスの場合と: org.junit.Assert.assertArrayEquals(....

むしろ迷惑な私は追加することもできます。

私は実際には同じオブジェクトを含む彼の二つの配列を除くSINGLESHOTの答えが好きです。オブジェクトが同じ実際のオブジェクト(異なるオブジェクトが同じ値が、等しくなければならない)ではないどのような場合

だから、私はこれを行う方法を示すために、彼の答えを強化するだろうと思っています。

@Test
public void myArraysShouldBeIdentical() {

    CustomObject one1 = new CustomObject("one");
    CustomObject two1 = new CustomObject("two");
    CustomObject three1 = new CustomObject("three");

    CustomObject one2 = new CustomObject("one");
    CustomObject two2 = new CustomObject("two");
    CustomObject three2 = new CustomObject("three");

    CustomObject[] expecteds = { one1, two1, three1 };
    CustomObject[] actuals = { one2, two2, three2 };
    assertArrayEquals(expecteds, actuals);
}

private static class CustomObject {
    public String value;

    CustomObject(String inValue)
    {
        value = inValue;
    }

    @Override
    public int hashCode() {
        return value.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (obj == this)
            return true;
        if (!(obj instanceof CustomObject))
            return false;

        CustomObject rhs = (CustomObject) obj;
        return value == rhs.value;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top