2017-06-10 30 views
0

)私はユニットテストの初心者です。私はStringを "トークン化"する関数をテストしています。 Stringは数式です。ここに私のコードは次のとおりです。junit AssertionFailedError(メモリアドレスが

@Test 
public void testTokenizer() throws InvalidExpressionException { 

    final String QUERY = "sin(x)/5*x"; 
    final String[] EXPECTED = {"x", "sin", "5", "x", "*", "/"}; 
    parser.parse(QUERY); 
    final String[] actual = parser.getTokens().toArray(new String[parser.getTokens().size()]); 

    Assertions.assertEquals(EXPECTED, actual); 
} 

これは私が取得エラーです:

org.opentest4j.AssertionFailedError: 
Expected :[Ljava.lang.String;@62043840 
Actual :[Ljava.lang.String;@5315b42e 

私はjunit5を使用しています。それらがメモリアドレスであるように見えます(私は初心者です)。 私は間違った主張をしていますか(ポインタや何かを比較していますか?配列のcomparitionsため

+0

回答は1つしか受け入れることができません; –

答えて

2

これらはメモリアドレスではありません、彼らはオブジェクトのハッシュコードが含まれているオブジェクト識別子です。配列のtoStringメソッドは、配列のオブジェクト識別子を返します。 「クラスオブジェクトのtoStringメソッドは、オブジェクトがインスタンスであるクラス名からなる文字列に記号文字 '@」とのハッシュコードの符号なしの16進表現を返す

http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--オブジェクト。"

アレイバージョンには、それが配列であることを示すいくつかの余分な文字が含まれています。

テスト中のメソッドが期待値を返しませんでした。これは、2つの異なる配列を持ち、配列が内容ではなく同一性でのみ等しいからです。したがって、それらが全く同じ配列オブジェクトでない限り、それらは等しくなることはできません。配列の内容がと等しいと主張する必要があります。

ちなみに、変数名EXPECTEDは、Javaの命名規則に違反しています。これは、アンダースコアのすべてが定数変数名、または少なくとも変数が不変なオブジェクトを指すためです。

アサーションメッセージに配列の内容が表示されるようにするには、それを示すアサーションメッセージ引数を追加します。

+0

余分な情報ありがとう、私はそれを感謝します。 'final'は' const'と同じものではありませんか、それとも本当にすべてを大文字から変更するべきですか? – defoification

+0

'const'はJavaのものではありません。厳密に言うと、つまり、Java言語仕様(JLS)によれば、_定数変数_は、型Stringの変数、または_定数式で初期化されたプリミティブ型です。それは特別なコンパイラ処理を取得します。一部の人々は、その特別な扱いを受けない不変オブジェクトへの参照に概念を拡張していますが、変更可能なオブジェクトを一定のものとみなすことはできません。 Javaの規約では、大文字の変数名を取得するために定数が必要になりますが、不変のオブジェクトに変更されますが、変更可能なオブジェクトに拡張される人もいます。悪いアイデア! –

+1

途中で素晴らしい答え:)、私の意見ではプラス1です –

3

使用Assert.assertArrayEquals、あなたがオブジェクトからidを比較している

import org.junit.Assert; 

@Test 
public void testTokenizer() throws InvalidExpressionException { 

    final String QUERY = "sin(x)/5*x"; 
    final String[] EXPECTED = {"x", "sin", "5", "x", "*", "/"}; 
    parser.parse(QUERY); 
    final String[] actual = parser.getTokens().toArray(new String[parser.getTokens().size()]); 

    Assert.assertArrayEquals(EXPECTED, actual); 
} 
+0

「比較」? –

+1

@LewBloch hhahahahahahahahahaahahahahahah fantaaaastic、私は気づいていない、私はスペイン語のスピーカー、私の神だ....私は未来の読者のために編集しないで笑うことができる –

+0

途中でファンタスティックな答え。 :) –

関連する問題