Не знаю, почему мой тест JUnit возвращается успешно, когда намеренно провалился - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в JUnit, поэтому извините, если то, что я спрашиваю, слишком просто.Я искал в Интернете, и я считаю, что я все делаю правильно, когда дело доходит до метода assertTrue ().Тем не менее, когда я запускаю этот тест, он возвращается, что он прошел, когда он намеренно потерпел неудачу.Дайте мне знать, если я делаю что-то не так.В настоящее время я использую Intellij IDEA и JUnit4.Вот мой основной класс:

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

}

и вот мой тестовый класс:

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

Спасибо, ребята!

1 Ответ

0 голосов
/ 21 февраля 2019

Я думаю, что тело цикла while никогда не будет выполнено, потому что primeIterator принадлежит пустому List.

...