単体テストが標準の命名規則<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.Bar
package にあるため、これは間違っているcom.foo.fooo
ため、テストクラスがテストするクラスとは異なるパッケージにあるという警告が表示されます。これは、私が書いているテスト クラスの 90% で機能します。もちろん、これは非常に理想的な状況です。実際のテストでは、複数のタイプのインスタンス変数が存在する可能性があり、次にどれがどれであるかを推測する必要があります。単体テストの名前からテストされたものであり、そのインスタンス変数の少なくとも 1 つが正しいクラス型であることが期待されます。