@Test
  public void removeNegativeNumber() throws Exception {
    // Given addressbook with one entry
    controller.add(johnData[0], johnData[1], johnData[2], johnData[3], johnData[4]);
    int sizeBefore = model.getEntries().size();

    // When
    controller.remove(-1);

    // Then everything should still be fine
    int sizeAfter = model.getEntries().size();
    assertThat(sizeAfter, is(equalTo(sizeBefore)));
  }
  /**
   * Während wir den Test geschrieben haben, ist uns aufgefallen, dass die Implementierung von Entry
   * geändert wurde und jetzt der Nachname als erster Parameter übergeben wird.
   *
   * @see AddressBookControllerTest
   */
  @Test
  public void add() throws ParameterException, SizeLimitReachedException {
    // Given
    Entry johnEntry = new Entry("Doe", "John", Gender.Male, new PhoneNumber(123456789));
    int sizeOfmodel = model.getEntries().size();
    ArgumentCaptor<Entry> entryAdded = ArgumentCaptor.forClass(Entry.class);

    // When adding John via controller
    this.controller.add(johnData[0], johnData[1], johnData[2], johnData[3], johnData[4]);

    // Then model is updated
    verify(model).addEntry(entryAdded.capture());
    assertThat(entryAdded.getValue(), is(johnEntry));
    assertThat(model.getEntries().size(), is(sizeOfmodel + 1));
    assertThat(model.getEntries().contains(johnEntry), is(true));
  }
  @Test
  public void removeOneEntry() throws Exception {
    // Given addressbook with some entry, added in non alphebetic order
    this.controller.add(johnData[0], johnData[1], johnData[2], johnData[3], johnData[4]);
    this.controller.add(aliceData[0], aliceData[1], aliceData[2], aliceData[3], aliceData[4]);
    this.controller.add(bobData[0], bobData[1], bobData[2], bobData[3], bobData[4]);
    int sizeBefor = model.getEntries().size();
    // Entries are ordered by surname and firstname (ascending).

    // When removing john
    controller.remove(2);

    // Then
    Entry johnEntry = new Entry("Doe", "John", Gender.Male, new PhoneNumber(123456789));
    verify(model).deleteEntry(eq(johnEntry));
    assertThat(model.getEntries().size(), is(equalTo(sizeBefor - 1)));
  }
  @Test
  /**
   * Fehler: Die Spezifikation oder das JavaDoc sagt nichts über eine Exception. "The entry number
   * is not allowed to refer to a non existing entry." Es sei denn man interpretiert "is not
   * allowed" als Definition von Exception werfen.
   */
  public void removeTooHighNumber() throws Exception {
    // Given addressbook with one entry
    controller.add(johnData[0], johnData[1], johnData[2], johnData[3], johnData[4]);
    int sizeBefore = model.getEntries().size();

    // When
    controller.remove(1);

    // Then everything should still be fine
    int sizeAfter = model.getEntries().size();
    assertThat(sizeAfter, is(equalTo(sizeBefore)));
  }
  @Test
  /** This will fail because erase's while condition is wrong. */
  public void erase() throws Exception {
    // Given addressbook with some entry, added in non alphebetic order
    this.controller.add(johnData[0], johnData[1], johnData[2], johnData[3], johnData[4]);
    this.controller.add(aliceData[0], aliceData[1], aliceData[2], aliceData[3], aliceData[4]);
    this.controller.add(bobData[0], bobData[1], bobData[2], bobData[3], bobData[4]);

    // When
    controller.erase();

    // Then
    // verify(model).erase(); I expected controller.erase, would just call model.erase
    verify(model, times(3)).deleteEntry(any(Entry.class));
    assertThat(model.getEntries().size(), is(0));
  }