2012-05-03 76 views
1

我想編寫執行junit 4.8.x測試類的特定測試方法的java代碼。 例如,在JUnit 3.8.x,執行一個特定的測試方法,我們寫以下的代碼塊:如何在junit中執行特定的測試方法4.8.x

TestResult res = junit.textui.TestRunner.run(junit.framework.TestSuite.createTest((Class< ? extends TestCase>)className, methodName)); 

在此,類名是測試用例的子類,並MethodName爲在定義的className測試方法。 它執行「methodName」測試方法並將結果保存在「res」中。 以同樣的方式,我也想爲junit 4.8.x類執行特定的測試方法。 有人可以告訴我答案...

+0

我會使用JUnit 4.10。當你嘗試這個時發生了什麼? AFAIK,它是一樣的。 –

+0

createTest()API需要TestCase的一個子類,而在junit 4.8.x的情況下,我們不擴展任何類。我們只用@Test註釋每個測試方法。我只能使用junit 4.8.x版本,因爲這是我的組織中唯一批准的版本。 – user1371779

+0

批准使用該庫的方法將會更加有用;) –

回答

0

如果您未使用TestCase,則可以將Cast轉換爲TestCase。

在JUnit 4.10中,TestSuite.createTest(Class theClass,String name)將取任何類。

如果我在4.10

https://github.com/KentBeck/junit/blob/master/src/main/java/junit/framework/TestSuite.java

public class TestSuite implements Test { 

/** 
* ...as the moon sets over the early morning Merlin, Oregon 
* mountains, our intrepid adventurers type... 
*/ 
static public Test createTest(Class<?> theClass, String name) { 
    Constructor<?> constructor; 
    try { 
     constructor= getTestConstructor(theClass); 
    } catch (NoSuchMethodException e) { 
     return warning("Class "+theClass.getName()+" has no public constructor TestCase(String name) or TestCase()"); 
    } 
    Object test; 
    try { 
     if (constructor.getParameterTypes().length == 0) { 
      test= constructor.newInstance(new Object[0]); 
      if (test instanceof TestCase) 
       ((TestCase) test).setName(name); 
     } else { 
      test= constructor.newInstance(new Object[]{name}); 
     } 

看看源的TestSuite在這個版本中,將採取任何類型。

+0

即使在JUnit 4.x中,createTest(class,String name)也是TestCase的子類。 createTest的參數類型是createTest(Class <?extends TestCase> theClass,String name)。我想要一個通過接受任何類而不是TestCase的子類來創建測試的API。 – user1371779

+0

也許是4.8不能做的事情,但4.10可以。 –

相關問題