Как хранить примеры объектов, используемых тестами, в файлах XML YML?

#java #spring-boot #testing #junit

Вопрос:

Когда я создаю свои модульные тесты, я объявляю и инициализирую множество примеров общих объектов, используемых тестами, в одном абстрактном классе, расширенном классами с тестами.

Например, я определяю продукт «телефон» в абстрактном классе и инициализирую его методом «инициализация», аннотированным @Before. Я создаю метод @Test «savePhoneTest» в дочернем классе, который вызывает метод «savePhone» с помощью «телефона». Этот объект всегда повторно инициализируется, и я могу использовать его в других тестах.

Возможно ли сохранить образцы объектов в файле XML / YML? Это хорошая практика? Как я могу извлечь объекты? Я использую пружинный ботинок. Спасибо

Комментарии:

1. Не уверен в XML/YML, но вы можете использовать CSV и различные другие методы при использовании параметризованных тестов JUnit5.

2. Хороший урок/пример baeldung.com/parameterized-tests-junit-5

Ответ №1:

Да, вы можете использовать XML/YAML/JSON для хранения образцов объектов. Это поможет вам написать меньший код для создания образцов объектов. Кроме того, используя этот подход, ваши тестовые случаи станут более удобными для обслуживания.

Я предпочту JSON больше XML/YAML .

Предположим, у вас есть Product класс, как показано ниже,

Product.java

 @Data
@NoArgsConstructor
public class Product {
    private int id;
    private String name;
    private float price;
    private String brand;
}
 

Вы можете создавать JSON file объекты для хранения. Класс JSON file for Product будет выглядеть так:

product.json

 {
    "id": 1000,
    "name": "Smart phone",
    "price": 60000.0,
    "brand": "SAMSUNG"
}
 

Всякий раз, когда вам нужен какой-либо объект Product класса, вы можете создать этот объект с помощью JSON file . Ниже приведен пример, показывающий, как создать объект java из JSON file :

 InputStream inputStream = Product.class.getResourceAsStream("/product.json");
Product product = new ObjectMapper().readValue(inputStream, Product.class);
 

Комментарии:

1. Спасибо, это работает! Разве вы не знаете, можно ли загружать образцы объектов, таких как «бобы», из контекста spring? Включает ли spring какую-либо функцию для этого?