2013-01-21 56 views
2

正如在不同位置提到的,maven(版本3.0.1)不支持項目之外的CLASSPATH。因此,當一個jUnitTest想要啓動一個外部應用程序(如OpenOffice)時,啓動命令'$> mvn test'時失敗。 在eclipse中,我可以手動添加CLASSPATH'運行配置',然後它工作正常。添加驗證我在Eclipse中的代碼?

我的問題:我可以在我的jUnitTest源代碼中添加驗證我在Eclipse中的代碼嗎?因爲這隻會跳過命令行上的測試。而其他測試仍然在命令行上繼續。

+7

觀察 - 調用OpenOffice的單元測試*不是單元測試!這聽起來像是一個集成測試,至少。 –

+0

我使用OpenOffice的java API,我只能測試一個單元格(即)它是否正確設置,當我啓動OO時,我的程序。因此對我來說,它是單元測試。但是如果你有單元測試的建議而不啓動面向對象,你可以通知我。 – kdg1955

+0

有太多的話要把它壓縮到一個評論中,但我認爲你應該將Java API的用法隱藏在一個façade後面。假設這個外觀是作爲一個接口呈現的,你可以在你的單元測試中模擬這個對象,並確認你正在調用API而不會觸發OO。 –

回答

3

編寫驗證,如果你想使用的類加載(需要是由於怎樣的類加載器的工作一個單獨的類的類。它會像

public class OODetector { 
    public static boolean isOOOnClassPath() { 
    try { 
     OODetector.class.getClassLoader().loadClass("org.... class name here ..."); 
     return true; 
    } catch (Throwable t) { 
     return false; 
    } 
    } 
} 

現在在任何開始測試需要在類路徑中的類,只是把Assume.assumeThat(OODetector.isOOOnClassPath(), is(true));和測試將在這樣的情況下被跳過,如

public class OOTests { 
    @Test 
    public void smokes() throws Exception { 
    Assume.assumeThat(OODetector.isOOOnClassPath(), is(true)); 
    // rest of test 
    } 
} 

或更好,但把它放在@BeforeClass,如

public class OOTests { 
    @BeforeClass 
    public static void smokes() throws Exception { 
    Assume.assumeThat(OODetector.isOOOnClassPath(), is(true)); 
    } 

    // tests 
} 

如果OO不在類路徑中,不會影響失敗的計數,但會使總測試計數有效,並且當您找出將運行時依賴關係獲取到的正確方法時,將跳過類中的所有測試您的Maven推出的測試類路徑然後測試將神奇地開始運行

0

只需添加一個運行時或VM標誌,您可以在代碼中測試其值。

3

您可以使用Maven profiles來激活不同的屬性,運行不同的命令,根據需要修改您的類路徑,甚至過濾掉一些測試。例如,您可以創建僅在Eclipse中使用的特定配置文件。