2009-07-20 62 views
4

我創建了一個SortedList類,它有一個構造函數,它將java.util.Comparator作爲參數。Junit內嵌比較器初始化錯誤

在我的機器上運行單元測試(通過eclipse 3.3.0)後,一切正常。然而,哈德遜的投訴,因爲它說它不能實例化我的比較。

這裏的我的簡單測試(片段)

public class SortedListTest { 

    class strcmp implements Comparator<String>{ 
     public strcmp(){} 

     public int compare(String s1,String s2){ 
      return s1.compareTo(s2); 
     } 
    } 
    @Test 
    public void testAdd(){ 
     SortedList<String> list = new SortedList<String>(new strcmp()); 
     } 
} 

或另一種方式:

public void testAdd(){ 
     SortedList<String> list = new SortedList<String>(new Comparator<String>(){ 
      public int compare(String s1,String s2){ 
       return s1.compareTo(s2); 
      } 
     }); 
} 

錯誤哈德森顯示的是

ar.com.lib.SortedListTest $ strcmp.initializationError0

錯誤消息

測試類應該具有公共的無參數的構造

堆棧跟蹤

java.lang.Exception的:測試類應該 具有公共無參數構造 在 的java.lang .reflect.Constructor.newInstance(Constructor.java:513) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 引起者: java.lang.NoSuchMethodException: ar.com.lib.SortedListTest $的strcmp() 在 java.lang.Class.getConstructor0(Class.java:2706) 在 java.lang.Class.getConstructor(類。 java:1657)

我已經嘗試使用@Ignore註釋,但沒有運氣到目前爲止。它不會編譯當我嘗試

@Ignore class strcmp{} 

任何想法將不勝感激。提前致謝。

+0

我不明白哈得遜是如何參與這 – 2009-07-21 15:12:09

+0

它的抱怨!麻煩製造者。 – Tom 2009-07-21 15:59:29

+0

我收到了同樣的東西。測試在Maven的本地運行良好,但在Hudson上出現此錯誤。 @忽略班級也不管用。使用JUnit 3風格(擴展TestCase)也不起作用。 – Trenton 2009-08-21 17:03:46

回答

0

java.lang.Exception的:測試類應該在

好有公共的零參數的構造函數,確實與@Test類有一個公共的零參數的構造?無法判斷您發佈的內容是否屬實。

您可能還想正確給內部類提供輔助修飾符(publicprotected等)以及正確名稱(類應以大寫字母開頭)。如果這些類是通過反射來調用的,那麼JUnit運行者總是可能對格式化和命名規則做出某些假設...

2

問題是Hudson將strcmp看作是它試圖運行的測試類。這是一個內部類的事實並沒有改變這一點。哈德森配置需要更改以排除此類作爲測試類。

如果你不能這樣做,那麼使用public Noargs構造函數將strcmp設置爲一個公共靜態類,並向其添加一個測試方法,它什麼都不做(或者該類的忽略標記可能工作)。但是,如果你能讓測試運動員根本不選擇那個類作爲測試課,那將會好得多。