Динамическое тестирование данных теста из файлов (xml, json, csv, txt) с использованием Junit и Mockito в проекте Gradle - PullRequest
1 голос
/ 18 марта 2019

В настоящее время я настроен на задачу, связанную с Junit и mockito.

Текущий статус: Один из моих коллег разработал несколько тестовых случаев с использованием Junit, Mockito и Gradle. Теперь при разработке кода, то, что он сделал при тестировании условий, он передал значения как жестко закодированные, но теперь есть новый запрос на изменение (CR)

Предположение: Мы предполагаем, что все жестко запрограммированные значения будут храниться в некоторой папке ресурсов. Теперь эта папка ресурсов будет содержать любой тип файла, потому что данные могут быть в формате Json, Xml, CSv, txt или чего-либо еще.

Требования: Мы хотели прочитать эти данные из файла, который может быть любого типа (Json, Xml, CSV, txt), проанализировать их, а затем нам нужно добавить эти данные, используя аннотации, без использования установщика-геттера там, где мы используем жесткий закодированные значения просто для того, чтобы скрыть жестко запрограммированные значения, а затем запустить тестовые случаи с использованием динамических значений?

Что нужно сделать, чтобы прочитать данные из файла, проанализировать эти данные в соответствии с типом данных, а затем с помощью аннотаций получить значения, а не с помощью метода установки геттера?

1 Ответ

1 голос
/ 18 марта 2019

В JUnit5 вы можете запускать параметризованные тесты с csv source .Вы можете увидеть пример со встроенными значениями CSV:

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

class PriceCalculatorTest {

  PriceCalculator classUnderTest;

  @BeforeEach
  void setUp() throws Exception {
    classUnderTest = new PriceCalculator();
  }

  @ParameterizedTest
  @CsvSource({"0.0, 13", "5.0, 14", "5.0,26", "15.0,27", "15.0,64", "10.0,65"})
  void testGetPrice(double expected, int age) {
    assertEquals(expected, classUnderTest.getPrice(age), 0.01D);
  }
}

Если вы хотите использовать внешний файл данных, для этого есть немного другой синтаксис:

@CsvFileSource(resources = "/two-column.csv", numLinesToSkip = 1)

Это предполагает, что выиспользуя CSV-файл с заголовками в первой строке.Если вы хотите использовать другой формат файла, вам нужно реализовать свой собственный ArgumentsProvider.

...