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
有一个公共的零参数构造函数? 无法判断您发布的内容是否属实。
您可能还想要正确给予内部类一个可访问性修饰符( public
, protected
等)以及正确的名称(类应以大写字母开头)。 如果这些类是通过反射调用的,那么JUnit运行器总是可能对格式化和命名规则做出某些假设。
上一篇: Junit inline comparator initialization error
下一篇: Build shared library,written in c++, by using gnu autotools on Mac/OS X?