質問

試験クラスは、いままで提供し、自分の過負荷の assertEquals 一部の特別なロジックに依存せずに Object.equals.残念ながらない仕事が早くることをここに宣言します私 assertEquals 方法は、Javaを探知していないのではないの静からのインポート org.junit.Assert.* ました。

があるので、周辺か。I.。があるのに対し過負荷に静的に輸入できますか?のないものだと思い、解名の方法は異なるがこのソリューションを持っていないので同じる魅力です。)

私の試験クラスファイルするとどうなるのかわかりません

package org.foo.bar;

import static org.junit.Assert.*;

import org.junit.Test;

public class BarTest {
    private static void assertEquals(Bar expected, Bar other) {
        // Some custom logic to test equality.
    }

    @Test
    public void testGetFoo() throws Exception {
        Bar a = new Bar();
        assertEquals(42, a.getFoo()); // Error *
    }

    @Test
    public void testCopyConstructor() throws Exception {
        Bar a = new Bar();
        // Fill a.
        Bar b = new Bar(a);
        assertEquals(a, b);
    }
}

Error * の方法 assertEquals(Bar, Bar) タイプ BarTest の適用はありませんの引数 (int, int).”

役に立ちましたか?

解決

ある部分はこの答えは一つのコンパイルエラー、その他のご利用についてassertEquals()

問題はありassertEquals()メソッドにより異なる二つの名前空間につ存在している。junit.を主張する名前空間、その他、org.foo.バーがあります。BarTest名前空間(現在の名前空間).

エラーが報告され、コンパイラにより シャドーイングルールで宣言された、Java言語仕様.静輸入を主張する.assertEquals()が影のようにassertEquals()で宣言されてBarTestクラスです。

の修正常の場合には影の宣言が使用FQNs(完全修飾名表記)。使う場合は、assertEquals(...)の程度php,c#,dに主張するクラス、使用

org.junit.Assert.assertEquals(...)

とが必要な場合に使用宣言だけで使用

assertEquals(...)

にBarTestだけでは影.その他のすべての授業を必要としないのいずれかを主張する.assertEquals()またはBarTest.asserEquals()インポートできる表明またはBarTestいないという思いを大切にしている必要がある輸入BarTest、他の場所でも述べました).

がありませんのシャドーイングだけで輸入のクラスまたはstaticメソッドではなくFQNs.

追加のものを考える

を主張する.assertEquals()を内部で活用し、equals()メソッドの引数。宣言は、assertEquals()でテストケースに違反すると乾燥の原則は、equals()メソッドのタイプ実施すべきであるわたって一貫して使用される装置の異なる二つの実装では、ソースコードおよび単体テスト(ユニットテストに混乱を引き起こすこと.

最適なアプローチが実施equals()のバーは、その使用を主張する.assertEquals()である.持っている人は、手続きをすれば、必要なBarTest.assertEquals().の疑似コードを参考にしassertEquals()のようなもので、主には、以下の

  1. 場合は両方の引数がnullの場合、trueを返します。
  2. の場合 が期待 がnullでない場合は、呼び出しequals()を が期待実際の としての引数に使います。場合にtrueを返しオブジェクトが等しい
  3. 場合を対象と等しくない捨てAssertionErrorを形式のメッセージ。

他のヒント

一つのソリューションの具体例を呼び出し assertEquals(Bar, Bar) 単位試験を伸ばしていきたクラスを一つの静的な方法として

class BarAssert extends Assert {
  public static void assertEquals(Bar expected, Bar other) {
        // Some custom logic to test equality.
    }
}

しまなど import static BarAssert.assertEquals; ご利用のカスタムトです。

謝罪することはできませんの質問に対する答えをより一層向けです。としての私のコメント付属のものをお勧めしますこのアプローチ.

唯一の方法は完全にどちらか一方を修飾することです。

import static org.junit.Assert.*;

import org.junit.Test;

public class BarTest {

    private static void assertEquals(Bar expected, Bar other) {
        // Some custom logic to test equality.
    }

    @Test
    public void testGetFoo() throws Exception {
        Bar a = new Bar();
        org.junit.Assert.assertEquals(42, a.getFoo());
    }
}
this.assertEquals(a,b);

または

BarTest.assertEquals(a,b);

これは、静的メソッドであるにもかかわらず、あなたはそれを使用するためのインスタンスを持っている必要がありますので、私は、最初のものと一緒に行きたい(それはプライベートだ)とthisは将来renamingsの奇抜の対象にはなりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top