2012-05-14 63 views
6

不工作我已經開始測試,現在我想用@After@Before@Test但我的應用程序只運行@Before方法並給出了控制檯輸出@After,@在測試用例

但是,如果我刪除了@After@Before它將運行@Test。我的代碼是在這裏:

public class TestPractise extends AbstractTransactionalDataSourceSpringContextTests{ 

    @Before 
    public void runBare(){ 
     System.out.println("before"); 
    } 

    @Test 
    public void testingMethod(){ 
     System.out.println("testing"); 
    } 

    @After 
    public void setDirty(){ 
     System.out.println("after"); 
    } 
} 

爲什麼不@After@Test@before同時工作?

回答

10

AbstractTransactionalDataSourceSpringContextTests類強制使用舊的JUnit 3.x語法,這意味着任何JUnit 4註釋都不起作用。

你的方法runBare()執行不@Before註釋的,而是因爲它被命名爲runBare(),這是ConditionalTestCase和JUnit TestCase類提供了一種方法。

所以,你有2個解決方案:

  • 使用AlexR答案使用JUnit 4個測試和Spring;
  • 保持你的AbstractTransactionalDataSourceSpringContextTests繼承,但使用onSetUponTearDown方法,而不是@Before@After方法。
+0

得到了同樣的問題混合使用JUnit 4和5.檢查註釋的導入並確保它們匹配。 – Muhd

3

它應該工作...但是因爲你正在使用Spring框架,JUnit 4是在幾年前推出的,所以我建議你使用註釋而不是繼承。

所以,註釋你與@RunWith(SpringJUnit4ClassRunner.class)類。刪除extends AbstractTransactionalDataSourceSpringContextTests

不要忘了讓@Before和@After方法靜態

現在,它應該工作。

即使您想擴展Spring抽象測試類,至少要注意其中的一些已被棄用。例如,類別AbstractTransactionalDataSourceSpringContextTests已被棄用。

+0

您能否給我一個@RunWith(SpringJUnit4ClassRunner.class)的例子? –

+0

如果你爲AbstractTransactionalDataSourceSpringContextTests寫一個很好的例子。 –

+0

對不起。這個例子非常簡單。只要刪除「擴展......」並添加我寫給班級的註釋。然後嘗試運行測試。 – AlexR