gpt4 book ai didi

java - JUnit 测试方法失败

转载 作者:行者123 更新时间:2023-11-28 21:23:58 26 4
gpt4 key购买 nike

我被困在这个简单的 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));
}

最佳答案

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

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);
}

这应该编译并测试您的代码试图测试的内容。但是您的设计存在一些问题。

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

findSame(Iterator<Integer> iterator, Integer x) {
while(iterator.hasNext()) {
if(iterator.next().equals(x)) {
return iterator.previousIndex();
}
}
return -1;
}

与其考虑“findSome 检查此迭代器是否在给定索引或超出给定索引处包含此元素”,不如考虑“findSome 检查此迭代器是否包含此元素”。

其次,您应该始终保持一致的代码样式。您没有一致地缩进代码,findSame 的缩进量与 public class main 相同,这让我觉得 findSame 与 main 类处于同一级别,而不是包含在 main 中。

缩进应该让您一目了然地了解程序的结构,因此您不必阅读程序的每个细节来了解它的一般流程。

关于java - JUnit 测试方法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com