2015-09-04 69 views
0

我正在寫一些JUnit測試,從第三方庫擴展一個類。超類延伸TestCase,所以根據定義,我的子類也是如此。我可以混合使用JUnit 3和JUnit 4嗎?

在我的子類中,我編寫了測試方法,前綴爲test,這些都會被執行。

然而,有許多原因,我們想移動到JUnit 4中(這些原因之一是,我們不希望有前綴test測試方法)

我試圖簡單地寫我的使用JUnit 4 @Test註釋進行新測試,但這些方法不會被執行。
例如:

public abstract class UtilityClassFromThirdPartyLibrary extends TestCase { 

} 

public class MyTestClass extends UtilityClassFromThirdPartyLibrary { 

    public void testThisMethodIsInvokedBecauseItStartsWithTest { 
    } 

    @Test 
    public void thisMethodDoesNotGetInvoked { 
    } 
} 

不延長的第三方測試類是不是一種選擇。 (值得注意的是,Spring的AbstractXmlFlowExecutionTests反過來擴展了其他Spring類,最終擴展爲TestCase。超類中的方法提供瞭如此多的設置和樣板,而不是僅僅使用JUnit 4擴展這些類將會適得其反)

如前所述,我們使用JUnit 4的@Test註解的動機之一是它允許我們更好地爲我們的方法命名。我們的觀點是test這個詞是多餘的,因爲該類明顯是一個測試類,並且該方法用@Test進行了註釋。我們用BDD風格編寫我們的測試,所以我們的測試方法名稱描述了被測單元應該做什麼 - 我們的命名約定是public void shouldDoSomething()

有誰知道它是否可能混合使用擴展的測試類JUnit 3的TestCase與使用JUnit 4的@Test?的方法,如果是,如何?

感謝
彌敦道


我已經看到了幾個,涉及到相同的問題,所以問題,但它們與Android或測試套件,所以不如完全一樣我題。 EG:
Is it possible to mix JUnit3 and JUnit4?
https://stackoverflow.com/questions/32393330/run-junit-3-and-junit-4-tests-in-the-same-class

+0

你將如何運行你的測試? Maven的?的IntelliJ?蝕? –

+0

是的,應該提到,測試是作爲我們的Maven構建的一部分運行的,但也在開發人員IDE中(我們可以選擇我們的IDE,並使用IntelliJ和Eclipse) –

+0

您是否嘗試過使用'@ RunWith'註釋[spring junit runner](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/junit4/SpringJUnit4ClassRunner.html)? –

回答

5

JUnit4風格測試,不得直接或間接地延長junit.framework.TestCase。如果這樣做,您經常會遇到混淆的行爲(由@Rule註釋的字段被忽略,由於基類方法未被JUnit調用等而導致測試失敗)。測試可以運行爲JUnit4風格或JUnit3風格,具體取決於運行方式。

你的選擇要麼堅持使用JUnit3,要麼說服基類的維護者創建支持JUnit4(Rules,Runners等)的類。

+0

謝謝 - 雖然它不提供解決方案,但它確實回答了核心問題,因爲無法混合使用Junit 3和4.謝謝:) –