#java #mockito #junit5
#java #mockito #junit5
Вопрос:
В настоящее время я настроен на задачу, которая связана с Junit и mockito.
Текущее состояние: Один из моих коллег разработал несколько тестовых примеров с использованием Junit, Mockito и Gradle. Теперь, при разработке кода, что он сделал при тестировании условий, он передал значения как жестко заданные, но теперь есть новый запрос на изменение (CR)
Предположение: Мы предполагаем, что все жестко запрограммированные значения будут храниться внутри некоторой папки ресурсов.Теперь эта папка ресурсов будет содержать файлы любого типа, поскольку данные могут быть Json, Xml, CSV, txt или любыми другими.
Требование: Мы хотели прочитать эти данные из файла, который может быть любого типа (Json, Xml, CSV, txt), проанализировать их, а затем нам нужно добавить эти данные с помощью аннотаций без использования getter setter там, где мы используем жестко запрограммированные значения, просто чтобы скрыть жестко запрограммированные значения, а затем запустить тестовые примеры с использованием динамических значений?
Что нужно сделать, чтобы прочитать данные из файла, проанализировать эти данные в соответствии с типом данных, а затем с помощью аннотаций получить значения, а не использовать getter setter?
Комментарии:
1. Если бы я хотел прочитать тестовые данные из JSON или XML, а не из csv-файла, какие аннотации можно использовать с JSON или XML для чтения данных, а затем проанализировать их, а затем протестировать с помощью junit?
Ответ №1:
В JUnit5 вы можете запускать параметризованные тесты с исходным кодом в формате csv. Вы можете увидеть пример со встроенными значениями 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
.