Макет опорных объектов - PullRequest
       5

Макет опорных объектов

2 голосов
/ 05 февраля 2012

Как избежать создания лишних строк при модульном тестировании?

Например, строка "SERIALIZED" кажется немного ненужной и произвольной ... что бы вы использовали вместо этого?

    Object update=new Object(); 
    FileWriter writer=mock(FileWriter.class);
    Serializer serializer=mock(Serializer.class);
    when(cache.getWriter(update)).thenReturn(writer);
    when(serializer.serialize(update)).thenReturn("SERIALIZED");

    FileRecorder recorder=new FileRecorder(serializer);
    recorder.receive(update);
    verify(writer).write("SERIALIZED");

1 Ответ

4 голосов
/ 06 февраля 2012

Я бы не назвал строки, которые вы используете, чтобы проверить, прошел ли ваш тест лишний .Однако, как вы это делаете, требует небольшого рефакторинга:

  • что означает "SERIALIZED"?Сможете ли вы вспомнить его назначение, скажем, через 2 месяца?
  • вы используете одну и ту же строку дважды, простая опечатка (что случится) сломает ваш тест.И это то, чего вы хотите избежать

Я предлагаю реорганизовать его в константу всего набора (или всего метода теста , если этот единственный тестэто единственное место, где вы его используете).И дайте ему правильное имя:

final String FAKED_SERIALIZER_OUTPUT = "Any random content";
Object update=new Object(); 
FileWriter writer=mock(FileWriter.class);
Serializer serializer=mock(Serializer.class);
when(cache.getWriter(update)).thenReturn(writer);
when(serializer.serialize(update)).thenReturn(FAKED_SERIALIZER_OUTPUT);

FileRecorder recorder=new FileRecorder(serializer);
recorder.receive(update);
verify(writer).write(FAKED_SERIALIZER_OUTPUT);

Обратите внимание, что содержимое строки становится неактуальным, учитывая, что имя переменной правильно описывает ее назначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...