web-dev-qa-db-ja.com

単体テストでassertArrayEqualsを使用する

私の意図は、クラスの1つのメソッドの検証に API で説明されているassertArrayEquals(int[], int[]) JUnitメソッドを使用することです。

しかし、Eclipseはそのようなメソッドを認識できないというエラーメッセージを表示します。これらの2つのインポートは次のとおりです。

import Java.util.Arrays;
import junit.framework.TestCase;

私は何か見落としてますか?

37
Eugene

これは、JUnit 4で機能するはずです。

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

public class JUnitTest {

    /** Have JUnit run this test() method. */
    @Test
    public void test() throws Exception {

        assertArrayEquals(new int[]{1,2,3},new int[]{1,2,3});

    }
}

(答えは このwiki記事 に基づいています)


これは、古いJUnitフレームワーク(JUnit 3)でも同じです。

import junit.framework.TestCase;

public class JUnitTest extends TestCase {
  public void test() {
    assertArrayEquals(new int[]{1,2,3},new int[]{1,2,3});
  }
}

違いに注意してください。注釈はなく、テストクラスはTestCaseのサブクラスです(静的アサートメソッドを実装します)。

56
Andreas_D

これは、Junitバージョンに依存せずにassertEqualsのみを使用する場合に便利です。

assertTrue(Arrays.equals(expected, actual));
30
carlospiles

追加してみてください:

import static org.junit.Assert.*;

assertArrayEqualsは静的メソッドです。

5
user417196

TestCase を拡張するJUnit 3.xスタイルのテストを記述している場合、Assert修飾子を使用する必要はありません-TestCaseはAssert自体を拡張するため、これらのメソッドは修飾子。

TestCase基本クラスを避けてJUnit 4アノテーションを使用する場合、Assert修飾子とimport org.junit.Assertが必要です。これらの場合、静的インポートを使用して修飾子を回避できますが、一部では poor style と見なされます。

0
mdma