それの親から静的コンテキスト内のテストクラス名を取得します。

Shpektkultius:

現在、私は、静的コンテキスト内で、BaseTestから継承するすべての基本となるクラスのクラス名を取得しようとしています。だから、説明のために私が使用し、ベースクラス書いています@BeforeClassJUnitののを。ここでの問題は、それがメモリH2データベースに所有していて、私は、クラスのすべてのテストの前に偽のアプリケーションを起動しています。私は、テストクラスとしてデータベースに名前を付けたいので、私は後でテストあたりのデータベースに書き込まれたものを見ることができます。

BaseTest:

public abstract class BaseTest {
private static final Map<String, String> testConfig = getTestConfig();
private static FakeApplication fakeApplication;

@BeforeClass
public static void onlyOnce(){
    fakeApplication = Helpers.fakeApplication(testConfig);
    Helpers.start(fakeApplication);
}

@AfterClass
public static void afterClass(){
    Helpers.stop(fakeApplication);
    fakeApplication = null;
}

private static Map<String, String> getTestConfig() {
    //Here should bee FooTest in this case! But actually it's BaseTest
    String className = MethodHandles.lookup().lookupClass().getSimpleName();
    ...
    configs.put("db.default.url", "jdbc:h2:file:./data/tests/" + className  + ";AUTO_SERVER=TRUE;MODE=Oracle;DB_CLOSE_ON_EXIT=FALSE");
}

例えば、いくつかの子供のテスト:

public class FooTest extends BaseTest{
     @Test 
     public void testFoo(){
     }
}

私はすでにいくつかのことを試してみましたが、私の知る限りでは、それはposssibleではありません。しかし、私はちょうど私がまだ知らないものがあるかどう依頼する必要があります。

Shpektkultius:

私は「@ClassRule」を使用してcustomgをimplemting解決策を見つけましたTestWatcherstarting(Description description)前に呼び出される@BeforeClass public static void beforeClass()メソッド私はこのようにそれを使用することができます。

ここに私のコードは次のとおりです。

public abstract class BaseTest {
    @ClassRule
    public static CustomTestWatcher classWatcher = new CustomTestWatcher();
    private static Map<String, String> testConfig;
    private static FakeApplication fakeApplication;    


    public static class CustomTestWatcher extends TestWatcher {
        private String className = BaseTest.class.getSimpleName();

        public String getClassName() {
            return className;
        }

        private void setClassName(String className) {
            this.className = className;
        }

        @Override
        protected void starting(Description description) {
            //This will set className to = FooTest!
            setClassName(description.getClassName());
            System.out.println("\nStarting test class: " + className);
        }
    }

    @BeforeClass
    public static void beforeClass() {
        //Here now finally is FooTest!
        String className = classWatcher.getClassName();
        System.out.println("Creating Test Database and Fake Application for " + className);
        ...
    }

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=214323&siteId=1