4

Objectこれは、メソッドがないため、コンパイルして実行するべきではないようfail()です。コンパイル時に何かファンキーなことが起こっていますか? (私は NetBeans を使用しています):

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

public class Test {

    @Test
    public void hello() {
        fail();

    }
}

よろしく、

グイド

4

3 に答える 3

18

import staticは、クラスのすべての静的メンバーをAssertコンパイル ユニットの静的名前空間にインポートします。呼び出しはfail()を指しAssert.fail()ます。

が定義されている場所に関してあなたが経験している混乱はfail()、私が通常 を使用することをお勧めしない理由ですimport static。私自身のコードでは、通常、クラスをインポートし、それを使用して静的メソッドを呼び出します。

import org.junit.Assert;
import org.junit.Test;

public class Test {

    @Test
    public void hello() {
        Assert.fail();
    }
}

はるかに読みやすい。

ただし、JB Nizet が指摘してimport staticいるように、JUnit のアサーションに使用するのはかなり一般的な方法です。十分な JUnit テストを書いたり読んだりすると、アサーション メソッドがどこから来たのかを知ることが第 2 の性質になります。

于 2013-03-02T17:55:21.867 に答える
6

これは完全に正しく、実行およびコンパイルされます-Eclipseを使用して既に確認しました。その理由は静的インポートです。

import static org.junit.Assert.*;

org.junit.Assert クラスのすべての静的フィールドまたはメソッドを追加するため、fail()メソッドが含まれます。

それにもかかわらず、発生する可能性のある問題は、テスト クラスの名前が注釈の名前と同じであるという事実です。

@Test

したがって、エラーが発生します。

インポート org.junit.Test は、同じファイルで定義された型と競合します

于 2013-03-02T17:57:55.120 に答える