Посмотрите на эти две строки:
List<Integer> primeList = new ArrayList<Integer>();
...
Iterator<Integer> primeIterator = primeList.iterator();
Вы создаете пустой список и затем проверяете содержимое этого списка. Поскольку в этом списке ничего нет, ваш код никогда не входит в цикл while
и, следовательно, тестовое утверждение никогда не вызывается.
Если вы замените это ...
Iterator<Integer> primeIterator = primeList.iterator();
... с этим ...
Iterator<Integer> primeIterator = prime.iterator();
... тогда вы будете тестировать итератор, созданный вашим PrimeNumbers
классом. Это должно быть то, что вы хотите сделать, хотя следует отметить, что этот вызов всегда будет возвращать false: primeIterator.equals(primeArray[i])
(поскольку он сравнивает итератор, а не значение внутри итератора с «ожидаемым» массивом), поэтому ваш тест потерпит неудачу на своей первой итерации в цикле while. Это был бы ложный минус.
Похоже, вы пытаетесь доказать, что PrimeNumbers
(который был закодирован как , а не возвращает 19) не возвращает 19, когда его просят вернуть первые 8 простых чисел. Если это так, то следующий способ может быть более компактным и конкретным способом сделать это:
@Test
public void test() {
//instantiate prime object, create primes list, and iterator
PrimeNumbers prime = new PrimeNumbers();
int n = 8;
int unexpectedPrimeNumber = 19;
// call the method
prime.computePrimes(n);
// gather the generated prime numbers into a list for easier assertion
List<Integer> primeList = new ArrayList<>();
prime.iterator().forEachRemaining(integer -> primeList.add(integer));
assertEquals("Should contain " + n + " prime numbers!", n, primeList.size());
assertFalse("Should not contain the unexpected prime number: " + unexpectedPrimeNumber, primeList.contains(unexpectedPrimeNumber));
}