4

単体テストを書くとき、私はextends Assert常にAssert.assertXXX.

例えば:

public class MyTestClass extends Assert {
    @Test
    public void SomeTest() {
        assertNotNull(""); // instead of Assert.assertNotNull("");
    }
}

拡張Assertすると、入力する手間が省けますAssert.assertNotNull("");Assert.あなたはそれをたくさん使うので、私の意見ではコードが乱雑です。

私のテスト クラスが別のクラスを拡張する必要はめったにありません。拡張する必要がある場合は、スーパークラスに Assert を拡張させる傾向があります。

ただし、インポートと修飾を回避するためだけに拡張するコーディング スタイルを壊しているように感じます。

この「貧弱な」コーディングスタイルですか?
これはテストクラスにすぎないため、これを行う場合でも「ベストプラクティス」コードですか?

編集:

import static org.junit.Assert.*;

Eclipse コード フォーマッタがすべてのインポートを解決するため、このような行は消去され、保存するたびに実際に使用されるすべてのメソッドの個々のインポートに置き換えられ、新しい assert メソッドを使用する場合は再インポートする必要があるため、機能しません。

確かに、しばらくテスト クラスをコーディングすると、新しいメソッドをインポートする必要性は減りますが、新しいテスト クラスをコーディングするときは面倒です。

4

6 に答える 6

7

いいえ、次のようにします。

import static org.junit.Assert.*;

public class MyTestClass {
   @Test
   public void SomeTest() {
       assertNotNull("");
   }
}
于 2012-12-23T18:59:22.840 に答える
2

個人的には、必要がなければクラスを拡張するのは好きではありません。使用しているメソッドの静的インポートの使用を検討しましたか? 余談ですが、Fest のアサーションを試して、より適切で読みやすいテストを行うことをお勧めします。

于 2012-12-23T18:59:46.357 に答える
1

私は同じ問題を抱えていましたが、解決するのは簡単です:

他の人が言うように使用してください:

import static org.junit.Assert.*;

public class MyTestClass {
   @Test
   public void SomeTest() {
       Assert.assertNotNull("");
   }
}

最も重要な部分は次のとおりです。

そして、次のように移動します: Window->Preferences, Java->Code Style->Organize Imports, "Number of static imports needed for .* (eg 'java.lang.Math.*'):" -> 0 に変更します。

これで、コード フォーマッタは ".*" インポートを "single class" インポートに変更しなくなりました。

于 2012-12-23T19:52:48.377 に答える
1

ポリモーフィズムが必要でない限り、クラスを拡張するのは不適切なスタイルです。これは、Sun が「 Constant Interface Antipattern」と呼んでいるものに似ています。そのページでわかるように、特にそれを防ぐために static import ステートメントが言語に追加されました。

個人的には、ただ書くだけAssert.assertNotNull(value)です。タイピングはそれほど多くなく、読みやすさが損なわれるとは感じません。

非修飾メソッドの使用を主張する場合は、すべてのメソッドを静的インポートでインポートする必要があります。これは、「*」で終わるインポート ステートメントも不適切なスタイルと見なされるためです。他の誰かがあなたのコードを保守するためにやってきた場合 (またはコードを確認するために 6 か月後に戻ってきた場合)、"*" で終わるインポートでは、メンテナーはメソッドがどこから来ているのかを突き止めるために調査作業を行う必要があります。一方、明示的なインポートでは、メソッドがどこから来たのかがすぐに明らかになります。

于 2012-12-23T19:44:28.697 に答える
0

または、「.*」インポートのファンでない場合:

Import static org.junit.Assert;

public class MyTestClass {
   @Test
   public void SomeTest() {
      Assert.assertNotNull("");
   }
}
于 2012-12-23T19:05:34.127 に答える
0

まず第一に、あなたはこの質問をしているので、あなたも自分のやり方が間違っていることがわかります:)誰もが静的インポートで行うべきだと言ったように。それが正しい方法です。限目。

正しい質問は、日食が干渉するのではなく、あなたを助ける方法です。少なくとも2つの方法があります。最初に、Eclipse が import xxx.* を展開する必要があるときのしきい値を設定できます。それを変更するだけで、xxx.* を持つことができます。他の方法は、コンテキスト アシストにアサーションを追加することです。このようにして、Eclipse は、アサーションを最初にインポートする必要なく、アサーションの使用法を提案します。

そして私のやり方:junitアサーションを使用しないでください。fest assert 2.0 を使用します。xxx.assertThat を static import するだけで、それだけです。

于 2012-12-23T21:43:45.663 に答える