2009-07-20 44 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设置为一个公共静态类,并向其添加一个测试方法,它什么都不做(或者该类的忽略标记可能工作)。但是,如果你能让测试运动员根本不选择那个类作为测试课,那将会好得多。