Junit内联比较器初始化错误

我创建了一个SortedList类,它有一个将java.util.Comparator作为参数的构造函数。

在我的机器上运行单元测试(通过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)上的java.lang.reflect.Constructor.newInstance(Constructor.java:513)处具有公共零参数构造函数。通过:java.lang.NoSuchMethodException:ar.com.lib.SortedListTest $ strcmp。()at java.lang.Class.getConstructor0(Class.java:2706)at java.lang.Class.getConstructor(Class.java:1657)

我已经尝试使用@Ignore注释,但目前还没有运气。 它不会编译时,我尝试

@Ignore class strcmp{}

任何想法将不胜感激。 提前致谢。


问题在于Hudson将strcmp看作是它试图运行的测试类。 这是一个内部类的事实并没有改变这一点。 哈德森配置需要更改以排除此类作为测试类。

如果你不能这样做,那么使用public Noargs构造函数将strcmp设置为一个公共静态类,并向其添加一个测试方法,该方法什么都不做(或者该类的ignore标记可能工作)。 但是,如果你能让测试运动员根本不选择那个类作为测试课,那将会好得多。


java.lang.Exception:测试类应该有公共的零参数构造函数

那么,你的类与@Test有一个公共的零参数构造函数? 无法判断您发布的内容是否属实。

您可能还想要正确给予内部类一个可访问性修饰符( publicprotected等)以及正确的名称(类应以大写字母开头)。 如果这些类是通过反射调用的,那么JUnit运行器总是可能对格式化和命名规则做出某些假设。

链接地址: http://www.djcxy.com/p/54923.html

上一篇: Junit inline comparator initialization error

下一篇: Build shared library,written in c++, by using gnu autotools on Mac/OS X?