Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit测试方法失败_Java_Unit Testing_Testing_Methods_Junit - Fatal编程技术网

Java JUnit测试方法失败

Java JUnit测试方法失败,java,unit-testing,testing,methods,junit,Java,Unit Testing,Testing,Methods,Junit,我一直坚持使用这个简单的JUnit测试方法,因为我不确定如何传递这个有迭代器的方法。如果有人能看一看,那将非常有帮助 以下是主要课程: public class Main { public static void main(String[] args) { final List<Integer> numbers = Arrays.asList(3, 4, 6, 1, 9); final Integer x = Integer.valueOf(1);

我一直坚持使用这个简单的JUnit测试方法,因为我不确定如何传递这个有迭代器的方法。如果有人能看一看,那将非常有帮助

以下是主要课程:

public class Main {
    public static void main(String[] args) {

    final List<Integer> numbers = Arrays.asList(3, 4, 6, 1, 9);
    final Integer x = Integer.valueOf(1);
    System.out.println(findSame(numbers.iterator(), x, 0));
}
public static final int findSame(Iterator<Integer> iterator, Integer x, int idx) {
    if (!iterator.hasNext()) {
        return -1;
    }

    if (iterator.next().equals(x)) {
        return idx;
    } else {
        return findSame(iterator, x, idx+1);
    }
}
}

这是我的测试试用方法,它不起作用。 我主要在迭代器方面遇到了问题,以及如何在此测试方法中传递这些特定值:

@Test
public void searchNumReturnsIndex1(){
    Main instance = new Main();        

    int x = 1;

    Iterator<Integer> iterator;
    int result = Main.findSame(null, x, 3);
    assertEquals(2, instance.findSame(null,x, 3));  
    }

如果我理解得很好。。。“searchNum”函数返回“number”列表中的“x”索引。。。在本例中,“6”位于第三个位置索引=2,因此这是需要比较的值:

 assertEquals(2, instance.searchNum(x, 0));

 assertEquals(1, instance.searchNum(x, 2));  


然后看看它是否有效。若6位于数字数组的第二个索引处(正如您在上面的代码中提到的),它肯定会起作用

假设您这样做是为了练习将迭代器作为参数传递,您应该做的是:

public class main {
    public static void main(String[] args) {
        // put whatever you want here, but if 'findSome' gets it's iterator as an argument,
        // then you shouldn't be trying to define it's list here. It's list is being passed
        // to it as an argument.
    }

    /* don't put final here unless you are working with subclasses and don't want them making their own versions of findSame */
    public static  int findSame(Iterator<Integer> iterator, Integer x, int idx) {
        if(!iterator.hasNext()) {
            return -1;
        }

        if(iterator.next().equals(x)) {
            return idx;
        } else {
            return findSame(iterator, x, idx+1);
        }
    }
}
测试应该是这样的:

@Test
public void searchNumReturnsIndex1() {
    Main instance = new Main();

    List<Integer> numbers = Arrays.asList(3, 4, 6, 1, 9);

    Iterator<Integer> iterator = numbers.iterator();

    int result = instance.findSame(iterator, 1, 3);
    assertEquals(2,result);
}
这应该编译并测试代码试图测试的内容。不过,您的设计存在一些问题

首先,您不应该让FindName接受第三个参数,除非出于某种原因您希望能够只检查列表的一部分。下面的内容会更有效,功能也会更简单

findSame(Iterator<Integer> iterator, Integer x) {
    while(iterator.hasNext()) {
        if(iterator.next().equals(x)) {
            return iterator.previousIndex();
        }
    }
    return -1;
}
不必考虑findSome检查该迭代器是否在给定索引处或更远处包含该元素,您可以考虑findSome检查该迭代器是否包含该元素

其次,您应该始终保持代码的风格一致。您没有一致地缩进代码,FindName的缩进量与公共类main相同,这使我认为FindName与类main处于同一级别,而不是包含在main中


缩进应该一眼就能告诉您程序的结构,因此您不必阅读程序的每一个细节就可以了解程序的总体流程。

assertEquals1,instance.searchNumx,2;你为什么断言结果应该是1?您的搜索函数甚至不能返回1,因为它从第二个参数2开始搜索,所以它可能返回的最低数字是2。@ErwinBolwidt确定,但当我执行assertEquals2时,instance.searchNumx,2;它仍然失败。数字从未初始化。您应该包括打印输出的测试结果,但这将导致空指针异常。您还以非静态方式调用静态成员,因此编译器也应该向您发出警告。请共享您的CS102DZ14类。请查看!我只是按原样编辑了一下。谢谢我怎样才能调用主类?我重新创建了我的方法!你现在能看一下吗?
findSame(Iterator<Integer> iterator, Integer x) {
    while(iterator.hasNext()) {
        if(iterator.next().equals(x)) {
            return iterator.previousIndex();
        }
    }
    return -1;
}