Testing an Iterator

Here is the Set interface. It extends Iterable<T>, so every set has an iterator() method:

public interface Set<T> extends Iterable<T> {
  boolean add(T item);       // adds item if it is absent; returns true if the set changed
  boolean remove(T item);    // removes item if it is present; returns true if the set changed
  boolean contains(T item);  // returns true if item is in the set
  int size();                // returns the number of items in the set
  // inherited from Iterable<T>:
  // Iterator<T> iterator(); returns an iterator over the items, in no promised order
}

SetTest is an abstract JUnit test class. Its tests run against every implementation of Set. Before each test, its field set holds a new, empty Set<Integer>:

public abstract class SetTest {

  protected Set<Integer> set;

  protected abstract Set<Integer> createSet();

  @BeforeEach
  public void setup() {
    set = createSet();
  }
}
Solution
@Test
public void iteratorVisitsEveryElement() {
  set.add(4);
  set.add(9);
  set.add(15);
  List<Integer> seen = new ArrayList<>();
  for (Integer x : set) {
    seen.add(x);
  }
  assertEquals(3, seen.size());
  assertTrue(seen.contains(4));
  assertTrue(seen.contains(9));
  assertTrue(seen.contains(15));
}