2011-04-20 52 views
8

我們有基於Spring 2.0.8的AbstractTransactionalDataSourceSpringContextTests構建的測試類。這裏有很多這些,都是用JUnit3風格編寫的。如何在Ant中使用JUnit3測試類運行自定義JUnit4 Runner?

爲了使用JUnit 4過濾,我們炮製了一個替代JUnit38Runner,它允許我們將這些測試匹配到特定的應用程序環境,並相應地將其過濾掉。

通過在我們的自定義JUnit38Runner上使用@RunWith註釋,整個測試套件可以在Ant之外正常運行。

但是,當我們嘗試在Ant中運行時,它強制單個測試運行爲junit.framework.TestSuite或包裝在JUnit4TestAdapter中,兩者均忽略JUnit4下的@RunWith註釋。更糟糕的是,我們現有的套件被Ant直接調用了suite()方法,而不是委託給JUnit。

我試圖從Ant JUnitTestRunner中進行擴展,並簡單地重寫run()方法,但該類根本不是爲了擴展而編寫的。

除了複製整個JUnitTestRunner並對其進行破解(這會讓我們意識到脆弱的代碼問題),有沒有人有解決此問題的其他方法的運氣?

+0

這裏好像有幾種代碼味道。我知道這可能不是你正在尋找的答案,但它可能是重構你的測試用例的時候了。 – bakoyaro 2011-08-04 15:56:20

+0

重構不會解決Ant的問題(在Junit 3中包裝JUnit 4測試)。有了很多解決方法,它就一直在磕磕絆絆,但我認爲我必須咬牙切齒,寫出一個JUnit4 Ant任務。 – Matt 2011-08-25 04:47:57

+0

也許在[升級到JUnit4並通過將它們一起運行來保留傳統JUnit 3測試和測試套件] [1]中有答案? [1]:HTTP://stackoverflow.com/questions/1861875/upgrading-to-junit4-and-keeping-legacy-junit-3-tests-and-test-suites-by-running – 2011-12-03 21:19:53

回答

0

我們有類似的問題,儘管它不像運行junit任務那麼幹淨,但解決起來並不是很難。我們用main()創建了一個類,它只是簡單地調用Junit4Runner。它添加了一個RunListener,它試圖用XML寫出junit報告輸出。這個想法是數據格式比跑步者更不可能改變,所以它不那麼脆弱。

我已經剝去了大量的環境特定的代碼,但這是基本的想法。我們test目標螞蟻看起來是這樣的:

<java failonerror="yes" 
      fork="true" 
      classname="com.mycompany.test.Junit4Runner"> 
     <classpath> 
      <pathelement location="${basedir}/bin" /> 
      <pathelement path="${ProjectTest.classpath}" /> 
      <!-- above classpath includes junit-4.8.1.jar --> 
     </classpath> 
     <arg value="${test.class}" /> 
    </java> 

您可以查看代碼的亞軍類here。它不依賴於Java 6 SE和Junit 4.8以外的任何內容,並且可能與Java 5 SE兼容。

+0

看起來它可能會起作用,雖然我會讓你在我店中提交之前更改p_和m_ ;-)。不幸的是,現在沒有時間對它進行測試,但我會將其標記爲現在已解決。 – Matt 2012-02-21 07:29:09

+0

p_和m_是我們的風格選擇 - 我想我已經習慣了:) – ahawtho 2012-02-22 18:50:38

相關問題