/
NikolayVasiljev
/
java-reboot
Обзор
Документация
Войти
/
NikolayVasiljev
/
java-reboot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
lesson05/src/test/java/SerialisationTest.java
151 строка
7 KB
VasiljevNik
Lesson 8.3
24 июн 2025, 05:51
24 июн 2025, 05:51
de12765
Код
Авторство
О чём код?
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.junit.Assert; import org.junit.Test; import org.xmlunit.builder.DiffBuilder; import org.xmlunit.diff.Diff; import ru.sberbank.jd.lesson05.input.Catalog; import ru.sberbank.jd.lesson05.input.Cd; import ru.sberbank.jd.lesson05.output.Album; import ru.sberbank.jd.lesson05.output.Artist; import ru.sberbank.jd.lesson05.output.ArtistRegistry; import ru.sberbank.jd.lesson05.output.Country; import java.io.File; import java.io.FileWriter; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class SerialisationTest{ @Test public void testSerialization() throws Exception { /** * Задаём эталлонные строки в XML и JSON */ String referenceXML = """ <ArtistRegistry countryCount="2"> <Country name="USA"> <Artist> <name>Bob Dylan</name> <Albums> <Album name="Empire Burlesque" year="1985"/> <Album name="Hide your heart" year="1988"/> </Albums> </Artist> </Country> <Country name="UK"> <Artist> <name>Dolly Parton</name> <Albums> <Album name="Greatest Hits" year="1983"/> <Album name="Still got the blues" year="1982"/> </Albums> </Artist> </Country> </ArtistRegistry> """; String referenceJson= """ { "countryCount" : 2, "countries" : [ { "name" : "USA", "artists" : [ { "name" : "Bob Dylan", "albums" : [ { "name" : "Empire Burlesque", "year" : 1985 }, { "name" : "Hide your heart", "year" : 1988 } ] } ] }, { "name" : "UK", "artists" : [ { "name" : "Dolly Parton", "albums" : [ { "name" : "Greatest Hits", "year" : 1983 }, { "name" : "Still got the blues", "year" : 1982 } ] } ] } ] }"""; /** * Копируем код из App с новым каталогом в папке input */ ObjectMapper xmlMapper = new XmlMapper(); Catalog catalog = xmlMapper.readValue(new File("src/test/resources/input/cd_catalogTest.xml"), Catalog.class); List<Cd> cds = catalog.getCds(); Map<String, Map<String, List<Cd>>> grouped = cds.stream() .collect(Collectors.groupingBy(Cd::getCountry, Collectors.groupingBy(Cd::getArtist))); List<Country> countries = new ArrayList<>(); for (Map.Entry<String, Map<String, List<Cd>>> entry1 : grouped.entrySet()) { String keyCountries = entry1.getKey(); Map<String, List<Cd>> valueArtists = entry1.getValue(); List<Artist> artistList = new ArrayList<>(); for (Map.Entry<String, List<Cd>> entry2 : valueArtists.entrySet()) { String keyArtists = entry2.getKey(); List<Album> valueAlbum = entry2.getValue().stream() .map(cd -> new Album(cd.getTitle(), cd.getYear())) .collect(Collectors.toList()); Artist artist = new Artist(keyArtists, valueAlbum); artistList.add(artist); } Country country = new Country(keyCountries, artistList); countries.add(country); } ArtistRegistry registry = new ArtistRegistry(countries.size(), countries); /** * Сериализуем registry в XML файл и записываем в папку output */ xmlMapper.enable(SerializationFeature.INDENT_OUTPUT); String xmlOutput = xmlMapper.writeValueAsString(registry); File xml = new File("src/test/resources/output/artist_by_countryTest.xml"); FileWriter xmlWriter = new FileWriter(xml); xmlWriter.write(xmlOutput); xmlWriter.close(); /** * Сравниваем эталонную строку referenceXML и полученную в результате сериализаии xmlOutput */ Diff myDiff1 = DiffBuilder.compare(referenceXML) .withTest(xmlOutput) .ignoreWhitespace() .checkForSimilar() .build(); Assert.assertFalse(myDiff1.hasDifferences()); /** * Сериализуем registry в JSON файл и записываем в папку output */ ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); String jsonOutput = mapper.writeValueAsString(registry); File json = new File("src/test/resources/output/artist_by_countryTest.json"); FileWriter jsonWriter = new FileWriter(json); jsonWriter.write(jsonOutput); jsonWriter.close(); /** * Сравниваем эталонную строку referenceJson и полученную в результате сериализаии jsonOutput */ JsonNode tree1 = mapper.readTree(referenceJson); JsonNode tree2 = mapper.readTree(jsonOutput); Assert.assertEquals(tree1,tree2); } }