2016-11-17 39 views
-1

我曾嘗試在主要方法中使用System.setProperty,但沒有問題,但是當我作爲Selenium學習的一部分切換到TestNG時,我意識到我們不能在Class級別編寫System.setProperty。它應該在方法級別或在static塊中。 我只是想了解什麼是強迫我們這樣做的Java功能。爲什麼不能在Class級別使用System.setProperty?

public class NewTest { 
    public String baseUrl = "http://newtours.demoaut.com/"; 
    static { 
     System.setProperty("webdriver.chrome.driver","D:\\paths\\chromedriver.exe");  
    } 

    WebDriver driver = new ChromeDriver(); 

    @Test 
    public void f1() { 
     ...} 
    } 

寫這篇靜態塊外顯示編譯錯誤,如 「在這一行多個標記,語法錯誤」

+0

如果它不在「靜態」塊中,那麼你想在什麼時候執行它?編譯器要求您使用正確的語法來指定代碼的運行時間。 – 4castle

+0

根據Java語法,「Statement」只能出現在方法或靜態塊中。在課堂級別,你只能寫出聲明。否則沒有任何意義,當你在課堂上寫下這個陳述的時候,陳述會被執行嗎? – Henry

+0

你能澄清一下,究竟是你的目標嗎?使用標準的Java語法很可能有一個合理的方法。 – dimo414

回答

2

我只是想了解什麼是Java的特點,那就是迫使我們去做這個。

'Java的特點'是你只能在類級別編寫方法和聲明,而System.setProperty()既不是:它是一個方法調用。

+0

其方法調用!謝謝.. –

0

在靜態塊中調用System.setProperty()是發生在類級別的。你可能會驚訝的是,這隻會在每個程序中發生一次 - 第一次引用NewTest類。保證每個JVM調用只執行一次字段和塊,並且這是一項功能。如果你想讓你的代碼運行得比你不想使用static語句更頻繁。

JUnit和類似的測試框架提供了在調用每個類或方法之前運行設置代碼的專用機制。有關如何在JUnit中實現此行爲的更多詳細信息,請參見@Before@BeforeClass以及this question

如果@Before/@BeforeClass沒有解決您的問題,請編輯更多的上下文,以澄清你想要完成的。包括你嘗試過的代碼示例 - 以及爲什麼它沒有工作 - 特別有用。

相關問題