不确定为什么 JUnit 测试会成功返回,而它是故意失败的
Not sure my why JUnit test is coming back successful, when it's intentionally meant to be a failure
我是 JUnit 的新手,如果我问的太简单了,我很抱歉。我在网上搜索过,我相信当涉及到 assertTrue() 方法时,我所做的一切都是正确的。然而,当我 运行 这个测试时,它返回它通过了,而它是故意要失败的。如果我做错了什么,请告诉我。我目前正在使用 Intellij IDEA 和 JUnit4。这是我的主要 class:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class PrimeNumbers implements Iterable<Integer> {
private List<Integer> primes = new ArrayList<Integer>();
/*
* creates a list of n prime numbers
*
* @param n - the number of primes to compute silently treats negative
* arguments as zero
*/
public void computePrimes(int n) {
int count = 1; // count of primes
int number = 2; // number tested for primeness
boolean isPrime; // is this number a prime
while (count <= n) {
isPrime = true;
for (int divisor = 2; divisor <= number / 2; divisor++) {
if (number % divisor == 0) {
isPrime = false;
break; // for loop
}
}
if (isPrime && (number % 10 != 9)) { // THIS IS THE FAULT!!!
primes.add(number);
count++;
}
number++;
}
}
@Override
public Iterator<Integer> iterator() {
return primes.iterator();
}
@Override
public String toString() {
return primes.toString();
}
}
这是我的测试 class:
import org.junit.Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static org.junit.Assert.*;
public class PrimeNumbersTest {
@Test
public void test(){
//instantiate prime object, create primes list, and iterator
PrimeNumbers prime = new PrimeNumbers();
List<Integer> primes = new ArrayList<Integer>();
Iterator<Integer> primeIterator = primes.iterator();
//array holding 19 so I can compare the objects
int[] primeArray = new int[]{2,3,5,7,11,13,17,19};
int i = 0;
int n = 8;
//call the method
prime.computePrimes(n);
//loop to iterate through the list and then check last item if it is equal to 19
while(primeIterator.hasNext()){
if(!(primeIterator.equals(primeArray[i]))) {
assertTrue("incorrect", primeIterator.equals(primeArray[i]));
}
i++;
primeIterator.next();
}
}
}
谢谢大家!
我猜 while
循环的主体永远不会执行,因为 primeIterator
属于一个空的 List
.
我是 JUnit 的新手,如果我问的太简单了,我很抱歉。我在网上搜索过,我相信当涉及到 assertTrue() 方法时,我所做的一切都是正确的。然而,当我 运行 这个测试时,它返回它通过了,而它是故意要失败的。如果我做错了什么,请告诉我。我目前正在使用 Intellij IDEA 和 JUnit4。这是我的主要 class:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class PrimeNumbers implements Iterable<Integer> {
private List<Integer> primes = new ArrayList<Integer>();
/*
* creates a list of n prime numbers
*
* @param n - the number of primes to compute silently treats negative
* arguments as zero
*/
public void computePrimes(int n) {
int count = 1; // count of primes
int number = 2; // number tested for primeness
boolean isPrime; // is this number a prime
while (count <= n) {
isPrime = true;
for (int divisor = 2; divisor <= number / 2; divisor++) {
if (number % divisor == 0) {
isPrime = false;
break; // for loop
}
}
if (isPrime && (number % 10 != 9)) { // THIS IS THE FAULT!!!
primes.add(number);
count++;
}
number++;
}
}
@Override
public Iterator<Integer> iterator() {
return primes.iterator();
}
@Override
public String toString() {
return primes.toString();
}
}
这是我的测试 class:
import org.junit.Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static org.junit.Assert.*;
public class PrimeNumbersTest {
@Test
public void test(){
//instantiate prime object, create primes list, and iterator
PrimeNumbers prime = new PrimeNumbers();
List<Integer> primes = new ArrayList<Integer>();
Iterator<Integer> primeIterator = primes.iterator();
//array holding 19 so I can compare the objects
int[] primeArray = new int[]{2,3,5,7,11,13,17,19};
int i = 0;
int n = 8;
//call the method
prime.computePrimes(n);
//loop to iterate through the list and then check last item if it is equal to 19
while(primeIterator.hasNext()){
if(!(primeIterator.equals(primeArray[i]))) {
assertTrue("incorrect", primeIterator.equals(primeArray[i]));
}
i++;
primeIterator.next();
}
}
}
谢谢大家!
我猜 while
循环的主体永远不会执行,因为 primeIterator
属于一个空的 List
.