Как проверить метод с помощью PrintWriter? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть следующий метод:

@Component
public class WriteCsvToResponse {

    private static final Logger LOGGER = LoggerFactory.getLogger(WriteCsvToResponse.class);

    public void writeStatus(PrintWriter writer, Status status) {

        try {

            ColumnPositionMappingStrategy mapStrategy
                = new ColumnPositionMappingStrategy();

            mapStrategy.setType(Status.class);

            String[] columns = new String[]{"id", "storeId", "status"};
            mapStrategy.setColumnMapping(columns);

            StatefulBeanToCsv btcsv = new StatefulBeanToCsvBuilder(writer)
                .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
                .withMappingStrategy(mapStrategy)
                .withSeparator(',')
                .build();

            btcsv.write(status);

        } catch (CsvException ex) {

            LOGGER.error("Error mapping Bean to CSV", ex);
        }
    }

Понятия не имею, как правильно его протестировать, используя mockito.

Используйте его для переноса состояния объекта в формат csv. Я использовал StringWriter, чтобы обернуть в него ответ. Больше не осталось подробностей, но, кажется, мне нужно создать несколько слов, чтобы пройти проверку:)

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

вы можете написать такой тест и изменить свой метод ввода:

    @Test
    public void test() {
        WriteCsvToResponse writeCsvToResponse = mock(WriteCsvToResponse.class);

        doAnswer(new Answer() {
            public Object answer(InvocationOnMock invocation) {
                Object[] args = invocation.getArguments();
                write((Status)args[1]);
                return null;
            }
        }).when(writeCsvToResponse).writeStatus(any(PrintWriter.class),any(Status.class));

        writeCsvToResponse.writeStatus(writer, status);
    }

    public void write(Status status) {
//      do anythings you like with status
    }
0 голосов
/ 14 сентября 2018

Вам не нужен mockito для проверки этого метода, только java.io.StringWriter.

Вот как вы можете написать тест для номинального использования:

@Test
void status_written_in_csv_format() {
    // Setup
    WriteCsvToResponse objectUnderTest = new WriteCsvToResponse ();
    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter);

    // Given
    Status status = ...

    // When
    objectUnderTest.writeStatus(printWriter, status);

    // Then
    String actualCsv = stringWriter.toString();
    assertThat(actualCsv.split("\n"))
       .as("Produced CSV")
       .containsExactly(
         "id,storeId,status",
         "42,142,OK");
}

В этом примере предполагаются некоторые вещи о вашем Status объекте, но у вас есть общее представление. Для утверждений я использую AssertJ , но вы можете сделать то же самое со встроенными утверждениями JUnit5.

Надеюсь, это поможет!

0 голосов
/ 11 сентября 2018

С небольшим рефакторингом, где Builder - это Spring Bean, внедренный в этот компонент.

Затем вы можете смоделировать этот конструктор, чтобы он возвращал имитированный StatefulBeanToCsv, в частности, метод write, где вы пишете условияи утверждения.Если вы сталкиваетесь с ошибкой, вы бросаете неконтролируемое исключение, такое как IllegalStateException, если все в порядке, вы ничего не выбрасываете

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