如果java中有多个输出,如何使用单元测试?



如何测试返回斐波那契数列的类?我对这段代码使用了迭代器。FibonacciIteratorTest类在下面。

public class FibonacciIterator implements Iterator<Integer>, Iterable<Integer>{
private int num1;
private int num2;
private int num3;
private int count;
private int to;
public FibonacciIterator(int to){
this.num1 = 0;
this.num2 = 1;
this.to = to;
this.count = -1;
}
public static Iterable<Integer> to(int num){
return new FibonacciIterator(num);
}
@Override
public Iterator<Integer> iterator(){
return this;
}
@Override
public boolean hasNext(){
if(count < to){
count++;
return true;
}
return false;
}
@Override
public Integer next(){
if(count < 2){
return count;
}
num3 = num1 + num2;
num1=num2;
num2=num3;
return num3;
}
}

期望值应该是0 1 1 2 3 5 8 13 21 34 55,而不是55。

class FibonacciIteratorTest {
@Test
void shouldReturnFibonacciNumbers(){
FibonacciIterator fibonacciNumbers= new FibonacciIterator();
assertEquals(55,fibonacciNumbers.to());
}
}

考虑到您的fibonacciNumbers.to方法返回int [],那么您可能需要使用assertArrayEquals:

int arr[]={0,1,1,2,3,5,8,13,21,34};
assertArrayEquals(arr, fibonacciNumbers.to(10));

如果你的方法fibonacciNumbers.to()返回的不是int数组,那么请告诉我们,以便我们可以相应地改变答案。

假设您的FibonacciIterator.to(int)方法返回Iterator<Integer>:

@Test
void shouldReturnFibonacciNumbers(){
var groundTruth = new ArrayList(Arrays.asList(1,1,2,3,5,8,13,21,34,55)).iterator();
var fibonacciNumbers = new FibonacciIterator().to(10);
while(groundTruth.hasNext()){
if(!fibonacciNumbers.hasNext()){
fail("Length doesn't match");
}
assertEquals(groundTruth.next(), fibonacciNumbers.next());
}
}

我没有测试代码,但它至少应该接近于工作。

最新更新