5

我创建了一个 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{}

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

4

2 回答 2

2

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

如果你不能这样做,那么让 strcmp 成为一个带有公共 noargs 构造函数的公共静态类,并向它添加一个什么都不做的测试方法(或者类上的忽略标记可能会起作用)。但是,如果您能让测试运行者完全不选择该类作为测试类,那就更好了。

于 2009-07-20T14:12:23.747 回答
0

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

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

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

于 2009-07-20T13:55:23.463 回答