亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從父級獲取靜態上下文中的測試類名稱

從父級獲取靜態上下文中的測試類名稱

慕村9548890 2022-10-20 17:36:51
目前,我正在嘗試在靜態上下文中獲取從 BaseTest 繼承的任何底層類的類名。因此,為了解釋,我正在編寫一個使用@BeforeClassjunit 的基類。這里的問題是我在類的所有測試之前啟動了一個假應用程序,它擁有自己的內存 h2 數據庫。我想將數據庫命名為測試類,以便稍后可以查看每次測試寫入數據庫的內容?;A測試:public abstract class BaseTest {private static final Map<String, String> testConfig = getTestConfig();private static FakeApplication fakeApplication;@BeforeClasspublic static void onlyOnce(){    fakeApplication = Helpers.fakeApplication(testConfig);    Helpers.start(fakeApplication);}@AfterClasspublic 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(){     }}我已經嘗試了幾件事,據我所知這是不可能的。但我只需要問是否有什么我還不知道的。
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

我找到了使用 '@ClassRule' 并實現 customg 的解決方案TestWatcher。由于在方法starting(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);

        ...

    }


查看完整回答
反對 回復 2022-10-20
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號