1

私は、ひどく考え抜かれたパッケージ構造を片付けているところです。これには、パッケージ間でのクラスの移動が多数含まれます。

Eclipse リファクタリング ツールは、対応する単体テストを新しいパッケージに自動的に移動しないため、これを手動で行うことを忘れないでください。私は怠け者で、愚かで物忘れが激しいので、たいていこれを忘れます。

間違ったパッケージにあるように見えるテストを特定するために何かをノックすることを検討していますが、既製のものを使用したいと考えています。

そのようなツールは存在しますか?

4

3 に答える 3

1

単体テストが標準の命名規則<class>Testに従っている場合は、最初にすべての単体テスト (名前が「Test」で終わるもの、および@Test少なくとも 1 回は注釈があるもの)を識別するクラスパス スキャナーを記述できます。それぞれの名前を取得し"com.foo.<class>Test"、テストを削除すると、最終的"com.foo.<class>"にテスト自体に型のインスタンス変数があるかどうかを確認できます"com.foo.<class>"。そうでない場合は、警告または何かを起動できます。

したがって、そのようなクラスがあると仮定します

package com.foo.Bar

@NoArgsConstructor
public class Bar {
   public int doSomething(){
    //...
    return 1337;
   }
}

そしてテスト:

package com.foo.fooo.BarTest

public class BarTest {

  private com.foo.Bar bar;  

  @Before
  public void setup(){
     bar = new Bar();
  }

  @Test
  public void testSomething(){
  //testing and stuff
  }
}

次に、BarTest クラスが単体テスト クラスであることがわかります (@Test注釈があり、Test で終わる名前もあるからです)。bar にあるインスタンス変数を確認し、それらの完全修飾を取得できます。テストがcom.foo.Barpackage にあるため、これは間違っているcom.foo.foooため、テストクラスがテストするクラスとは異なるパッケージにあるという警告が表示されます。これは、私が書いているテスト クラスの 90% で機能します。もちろん、これは非常に理想的な状況です。実際のテストでは、複数のタイプのインスタンス変数が存在する可能性があり、次にどれがどれであるかを推測する必要があります。単体テストの名前からテストされたものであり、そのインスタンス変数の少なくとも 1 つが正しいクラス型であることが期待されます。

于 2013-09-18T14:29:33.273 に答える
0

そのようなツールは存在しないというのが答えのように思われるので、私は先に進み、自分で何かをまとめました。私が維持しているツールの追加機能に自然に適合しました。

他の人に役立つ場合は、の 1.1-SNAPSHOT で利用できます。

https://github.com/hcoles/highwheel

これは現在、次の命名規則を想定して、テスト対象のクラスの名前を推測する単純なテストです。

Test<Foo>

また

<Foo>Test

フォローされています。そのクラスが存在しない場合は、同じ名前の別のクラスが別のパッケージに存在するかどうかを確認します。

于 2013-09-20T21:33:32.130 に答える