@Before
 public void setUp() {
   datenbasisFactory = new DatenbasisFactory();
   registerFactory = mock(RegisterFactory.class);
   datenbasisFactory.setRegisterFactory(registerFactory);
   dataInputFacade = mock(DataInputFacade.class);
   dataOutputFacade = mock(DataOutputFacade.class);
 }
  @Test
  public void getInstanceCallsFacadeCorrectly()
      throws IOException, UnknownBuchungTypeException, ParseException {
    when(dataInputFacade.getDataString()).thenReturn(ANY_STRING_VALUE);
    when(dataInputFacade.getInt()).thenReturn(33);

    datenbasisFactory.getInstance(dataInputFacade);

    verify(dataInputFacade, times(34)).getDataString(); // 1x version; 33x register name
    verify(dataInputFacade).getInt();
  }
  @Test
  public void getInstanceProducesThreeRegisterEntriesWithSameName()
      throws IOException, UnknownBuchungTypeException, ParseException {
    when(dataInputFacade.getDataString()).thenReturn(ANY_STRING_VALUE);
    when(dataInputFacade.getInt()).thenReturn(3);
    when(registerFactory.getInstance(any(DataInputFacade.class), anyString()))
        .thenReturn(new Register(ANY_STRING_VALUE));

    datenbasisFactory.getInstance(dataInputFacade);

    verify(registerFactory, times(3)).getInstance(dataInputFacade, ANY_STRING_VALUE);
  }
  @Test
  public void saveDatenbasis() throws IOException {
    Datenbasis datenbasis = new Datenbasis();
    datenbasis.setVersionInfo(ANY_VERSION_INFORMATION);
    List<Register> registerList = createRegisterList();
    datenbasis.setRegisterList(registerList);

    datenbasisFactory.saveData(dataOutputFacade, datenbasis);

    verify(dataOutputFacade).writeString(ANY_VERSION_INFORMATION);
    verify(dataOutputFacade).writeInt(registerList.size());
    verify(registerFactory).saveData(dataOutputFacade, registerList.get(0));
    verify(registerFactory).saveData(dataOutputFacade, registerList.get(1));
  }
  @Test
  public void getInstanceCallsRegisterFactorySeveralTimes()
      throws IOException, UnknownBuchungTypeException, ParseException {
    when(dataInputFacade.getDataString()).thenReturn(ANY_REGISTER_NAME);
    when(dataInputFacade.getInt()).thenReturn(3);
    when(registerFactory.getInstance(any(DataInputFacade.class), anyString()))
        .thenReturn(new Register(ANY_REGISTER_NAME));
    Datenbasis actualDatenbasis = datenbasisFactory.getInstance(dataInputFacade);

    List<Register> registers = actualDatenbasis.getRegisterList();
    assertThat(registers).hasSize(3);
    assertThat(registers.get(0).getName()).isEqualTo(ANY_REGISTER_NAME);
    assertThat(registers.get(1).getName()).isEqualTo(ANY_REGISTER_NAME);
    assertThat(registers.get(2).getName()).isEqualTo(ANY_REGISTER_NAME);
    verify(registerFactory, times(3)).getInstance(dataInputFacade, ANY_REGISTER_NAME);
  }