{"id":326,"date":"2023-12-29T09:04:21","date_gmt":"2023-12-29T08:04:21","guid":{"rendered":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/?page_id=326"},"modified":"2023-12-29T09:21:27","modified_gmt":"2023-12-29T08:21:27","slug":"tdd","status":"publish","type":"page","link":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/tdd\/","title":{"rendered":"Test Driven Development"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"326\" class=\"elementor elementor-326\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0f13419 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0f13419\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-37d724a\" data-id=\"37d724a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f06f279 elementor-widget elementor-widget-heading\" data-id=\"f06f279\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.18.0 - 20-12-2023 *\/\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h2 class=\"elementor-heading-title elementor-size-default\">Test Driven Development<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a50fafb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a50fafb\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b0fa533\" data-id=\"b0fa533\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fba037d elementor-position-right elementor-widget__width-initial elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"fba037d\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.18.0 - 20-12-2023 *\/\n.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:768px){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:right;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:left;flex-direction:row}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{align-items:flex-end}}@media (max-width:767px){.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}<\/style><div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><img fetchpriority=\"high\" decoding=\"async\" width=\"604\" height=\"583\" src=\"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/12\/tddicon.png\" class=\"attachment-large size-large wp-image-329\" alt=\"\" srcset=\"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/12\/tddicon.png 604w, https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/12\/tddicon-300x290.png 300w\" sizes=\"(max-width: 604px) 100vw, 604px\" \/><\/figure><div class=\"elementor-image-box-content\"><h3 class=\"elementor-image-box-title\">Czym jest Test Driven Development (TDD)?<\/h3><p class=\"elementor-image-box-description\">TDD to metoda tworzenia oprogramowania, polegaj\u0105ca na r\u00f3wnoczesnym pisaniu test\u00f3w oraz kodu w\u0142a\u015bciwego. Podej\u015bcie to zak\u0142ada, \u017ce przed napisaniem w\u0142a\u015bciwej funkcjonalno\u015bci aplikacji, tworzymy test. Podczas tworzenia kodu mo\u017cna wyr\u00f3\u017cni\u0107 trzy fazy: Red, Green oraz Refactor, kt\u00f3re nast\u0119puj\u0105 po sobie. Jest to Mikrocykl, kt\u00f3ry powtarza si\u0119 w k\u00f3\u0142ko: Red-Green-Refactor.\n<\/p><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-088362e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"088362e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-08be930\" data-id=\"08be930\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-27a8404 elementor-position-left elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"27a8404\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/plugins\/elementor\/assets\/css\/widget-icon-box.min.css\">\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-traffic-light\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tTDD \u2013 czym jest faza Red?\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tPodczas tej fazy dodajemy tylko jeden test, kt\u00f3ry nie przechodzi. Ten nowy test sygnalizuje, \u017ce potrzebne jest utworzenie odpowiedniego kodu, kt\u00f3ry spowoduje, \u017ce test b\u0119dzie przechodzi\u0142.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3941d1b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3941d1b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6a2ecd8\" data-id=\"6a2ecd8\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-eadb517 elementor-position-left elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"eadb517\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-traffic-light\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tTDD \u2013 czym jest faza Green?\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tW tej fazie dodajemy kod potrzebny do przej\u015bcia nowo utworzonego testu. Staramy si\u0119 to robi\u0107 najpro\u015bciej, jak si\u0119 da, aby jak najszybciej otrzyma\u0107 pozytywny wynik testu. Wa\u017cne jest, aby przy tym inne testy, utworzone w wcze\u015bniejszych cyklach, tak\u017ce przechodzi\u0142y. Po uzyskaniu wynik\u00f3w pozytywnych ko\u0144czymy t\u0119 faz\u0119 i nie dodajemy ju\u017c ani jednej linijki kodu.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2a4c962 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2a4c962\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-194fe53\" data-id=\"194fe53\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-921ceb4 elementor-position-left elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"921ceb4\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-traffic-light\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tTDD \u2013 czym jest faza Refactor?\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tW fazie Refactor poprawiamy napisany kod. Na przyk\u0142ad, poprawiamy nazwy zmiennych, eliminujemy redundancj\u0119. Robimy po prostu \"kosmetyk\u0119\", nie zmieniaj\u0105c funkcjonalno\u015bci. Najlepiej jest po wykonaniu zmian kosmetycznych uruchomi\u0107 testy, aby sprawdzi\u0107, czy niczego nie zepsuli\u015bmy. Po tej fazie powtarzamy Mikrocykl: Red-Green-Refactor, a\u017c do momentu, kiedy napiszemy wszystkie testy pokrywaj\u0105ce logik\u0119 biznesow\u0105.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-bb317e4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"bb317e4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-533d908\" data-id=\"533d908\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-85380ed elementor-position-right elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"85380ed\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-question\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tCzy TDD to jedyna s\u0142uszna metoda tworzenia kodu?\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tTDD jest rozbudowanym narz\u0119dziem, kt\u00f3re w odpowiednich warunkach mo\u017ce u\u0142atwi\u0107, upro\u015bci\u0107 i usprawni\u0107 proces rozwoju kodu. Jednak nie zawsze mamy do czynienia z takim zadaniem. Podej\u015bcie TDD nie sprawdzi si\u0119 w projekcie prostym, ma\u0142o skomplikowanym \u2013 stosowanie w\u00f3wczas TDD mo\u017ce znacznie wyd\u0142u\u017cy\u0107 czas realizacji tego projektu, za\u015b zalety jego stosowania mog\u0105 by\u0107 niewielkie. Podej\u015bcie klasyczne r\u00f3wnie\u017c b\u0119dzie lepsze, gdy mamy do czynienia z problemem, kt\u00f3rego rozwi\u0105zanie nie jest dla nas oczywiste.\nW takiej sytuacji najpierw staramy si\u0119 jak najszybciej napisa\u0107 kod, dzi\u0119ki kt\u00f3remu b\u0119dziemy mieli pewno\u015b\u0107, \u017ce potrafimy poprawnie rozwi\u0105za\u0107 ten problem.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8e32c1c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8e32c1c\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-101a367\" data-id=\"101a367\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cb834aa elementor-position-right elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"cb834aa\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-thumbs-up\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tTDD \u2013 jakie s\u0105 zalety tej techniki?\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tPo pierwsze, Test Driven Development znacznie zmniejsza mo\u017cliwo\u015b\u0107 wyst\u0105pienia b\u0142\u0119d\u00f3w w aplikacji. Unikamy b\u0142\u0119d\u00f3w, poniewa\u017c aplikacja jest przetestowana na bie\u017c\u0105co. Dzi\u0119ki temu mo\u017cna znacznie ograniczy\u0107 czas, poniewa\u017c nie trzeba go marnowa\u0107 na szukanie b\u0142\u0119d\u00f3w. Kolejn\u0105 zalet\u0105 jest \u0142atwiejsza rozszerzalno\u015b\u0107 aplikacji. Gdy wracamy po jakim\u015b czasie do projektu, zapewne wiele zapomnimy. Jednak przeprowadzone testy stanowi\u0105 dokumentacj\u0119, dzi\u0119ki kt\u00f3rej szybciej wchodzimy w projekt i jeste\u015bmy w stanie go zaktualizowa\u0107, nie nara\u017caj\u0105c si\u0119 na nowe b\u0142\u0119dy. TDD pomaga utrzyma\u0107 stabilno\u015b\u0107 kodu i u\u0142atwia wprowadzanie zmian w p\u00f3\u017aniejszych fazach projektu.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7fbb00e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7fbb00e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-492a8e7\" data-id=\"492a8e7\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-60812aa elementor-position-right elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"60812aa\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-code\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tImplementacja przy u\u017cyciu TDD\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tPoni\u017csza implementacja jest wykonana w j\u0119zyku Java. Do robienia asercji wykorzystuj\u0119 bibliotek\u0119 org.hamcrest.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8814cd6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8814cd6\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-235d9da\" data-id=\"235d9da\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-449e916 elementor-widget elementor-widget-text-editor\" data-id=\"449e916\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.18.0 - 20-12-2023 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t<p>Moim zadaniem jest stworzenie prostej klasy reprezentuj\u0105cej samoch\u00f3d. Za\u0142o\u017cenia, kt\u00f3re ma spe\u0142nia\u0107 stworzona klasa:<\/p><ol><li>Nowy obiekt ma mie\u0107 licznik kilometr\u00f3w wyzerowany.<\/li><li>Samoch\u00f3d ma zapisywa\u0107 przejechane kilometry.<\/li><li>Samoch\u00f3d ma mie\u0107 mo\u017cliwo\u015b\u0107 wyzerowania stanu licznika.<\/li><\/ol><p>Zabieramy si\u0119 za pisanie aplikacji, oczywi\u015bcie zaczynamy od stworzenia testu, czyli od fazy Red:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51f1c09 elementor-widget elementor-widget-text-editor\" data-id=\"51f1c09\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>@Test<\/p><p>\u00a0void nowyObiektKlasySamochodPowinienMiecPrzejechanychZeroKilometrow () {<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/given<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Samochod samochod = new Samochod();<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/when<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/then<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 assertThat(samochod.pobierzPrzejechaneKilometry, equalTo(0));<\/p><p>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a180eb0 elementor-widget elementor-widget-text-editor\" data-id=\"a180eb0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Sprawdzamy, czy test przechodzi. Mamy b\u0142\u0105d:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-03c1af1 elementor-widget elementor-widget-text-editor\" data-id=\"03c1af1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><em>java: cannot find symbol<\/em><br \/><em>symbol: method pobierzPrzejechaneKilometry()<\/em><br \/><em>location: variable samochod of type com.test.testing.Samochod<\/em><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a8d8bf elementor-widget elementor-widget-text-editor\" data-id=\"5a8d8bf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Przechodzimy zatem do fazy green. Implementujemy poni\u017cszy kod:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a1ecc72 elementor-widget elementor-widget-text-editor\" data-id=\"a1ecc72\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>public class Samochod {<\/p><p>\u00a0 \u00a0 int przejechaneKilometry;<\/p><p>\u00a0 \u00a0 public Samochod() {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 this.przejechaneKilometry = 0;<br \/>\u00a0 \u00a0 }<\/p><p>\u00a0 \u00a0 public int pobierzPrzejechaneKilometry() {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 return przejechaneKilometry;<br \/>\u00a0 \u00a0 }<br \/>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab30fca elementor-widget elementor-widget-text-editor\" data-id=\"ab30fca\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Sprawdzamy test \u2013 przechodzi. Przechodzimy do fazy Refactor. Patrzymy czy mo\u017cna w kodzie co\u015b poprawi\u0107. Moim zdaniem, na razie nie ma takiej potrzeby, wi\u0119c ko\u0144czymy pierwszy Mikrocykl i przechodzimy do kolejnego, zaczynamy oczywi\u015bcie od fazy Red. Piszemy kolejny test:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0154024 elementor-widget elementor-widget-text-editor\" data-id=\"0154024\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>@Test<br \/>void obiektKlasySamochodPowinienZapisywacPrzejechaneKilometry () {<br \/>\u00a0\u00a0\u00a0 \/\/given<br \/>\u00a0\u00a0\u00a0 Samochod samochod = new Samochod();<br \/>\u00a0\u00a0\u00a0 \/\/when<br \/>\u00a0\u00a0\u00a0 samochod.podroz(15);<br \/>\u00a0\u00a0\u00a0 \/\/then<br \/>\u00a0\u00a0\u00a0 <em>assertThat<\/em>(samochod.pobierzPrzejechaneKilometry(), <em>equalTo<\/em>(15));<br \/>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5df542a elementor-widget elementor-widget-text-editor\" data-id=\"5df542a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Sprawdzamy czy na pewno test ko\u0144czy si\u0119 nie powodzeniem i przechodzimy do Fazy Green. Rozszerzamy nasz\u0105 klas\u0119 Samoch\u00f3d, dok\u0142adaj\u0105c metod\u0119 \u201epodr\u00f3\u017c\u201d:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-82cf0bc elementor-widget elementor-widget-text-editor\" data-id=\"82cf0bc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>public void podroz(int iloscKilometrow) {<br \/>\u00a0\u00a0\u00a0 przejechaneKilometry += iloscKilometrow;<br \/>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc12a50 elementor-widget elementor-widget-text-editor\" data-id=\"bc12a50\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Sprawdzamy obydwa napisane testy \u2013 pojawiaj\u0105 si\u0119 zielone haczyki \u2013 a zatem test zako\u0144czony sukcesem \u2013 mo\u017cemy zaj\u0105\u0107 si\u0119 ostatni\u0105 faz\u0105 tego cyklu: Refactor. Tutaj, tak jak poprzednio, nie ma potrzeby ingerowania. Drugi Mikrocykl zako\u0144czony, zaczynamy kolejny \u2013 tworzymy test:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9b668a elementor-widget elementor-widget-text-editor\" data-id=\"d9b668a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>@Test<br \/>void obiektKlasySamochodPoKliknieciuZerujLicznikPowinienGoWyzerowac (){<br \/>\u00a0\u00a0\u00a0 \/\/given<br \/>\u00a0\u00a0\u00a0 Samochod samochod = new Samochod();<\/p><p>\u00a0 \u00a0 samochod.podroz(15);<br \/>\u00a0\u00a0\u00a0 \/\/when<br \/>\u00a0\u00a0\u00a0 samochod.zerujLicznik();<br \/>\u00a0\u00a0\u00a0 \/\/then<br \/>\u00a0\u00a0\u00a0 <em>assertThat<\/em>(samochod.pobierzPrzejechaneKilometry(), <em>equalTo<\/em>(0));<br \/>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34d131f elementor-widget elementor-widget-text-editor\" data-id=\"34d131f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><em>java: cannot find symbol<\/em><\/p><p><em>\u00a0 symbol:\u00a0\u00a0 method zerujLicznik()<\/em><\/p><p><em>\u00a0 location: variable samochod of type com.test.testing.Samochod<\/em><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-226aca1 elementor-widget elementor-widget-text-editor\" data-id=\"226aca1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Nast\u0119pnie uzupe\u0142niamy nasz kod w\u0142a\u015bciwy:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce959f2 elementor-widget elementor-widget-text-editor\" data-id=\"ce959f2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>public void zerujLicznik() {<br \/>\u00a0\u00a0\u00a0 przejechaneKilometry = 0;<br \/>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c3f0f28 elementor-widget elementor-widget-text-editor\" data-id=\"c3f0f28\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Po zaimplementowaniu powy\u017cszej metody wszystkie testy przechodz\u0105. Mo\u017cemy zabra\u0107 si\u0119 za Refactor. Mo\u017cemy przenie\u015b\u0107 tworzenie obiektu samochodu przed wszystkie testy, aby tego nie powtarza\u0107. W\u00f3wczas klasa testowa wygl\u0105da nast\u0119puj\u0105co:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d456861 elementor-widget elementor-widget-text-editor\" data-id=\"d456861\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>class SamochodTest {<br \/>\u00a0\u00a0\u00a0 Samochod samochod = new Samochod();<br \/>\u00a0\u00a0\u00a0 @Test<br \/>\u00a0\u00a0\u00a0 void nowyObiektKlasySamochodPowinienMiecPrzejechanychZeroKilometrow () {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/given<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/when<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/then<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <em>assertThat<\/em>(samochod.pobierzPrzejechaneKilometry(), <em>equalTo<\/em>(0));<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0\u00a0 @Test<br \/>\u00a0\u00a0\u00a0 void obiektKlasySamochodPowinienZapisywacPrzejechaneKilometry () {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/given<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/when<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 samochod.podroz(15);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/then<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <em>assertThat<\/em>(samochod.pobierzPrzejechaneKilometry(), <em>equalTo<\/em>(15));<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0 \u00a0@Test<br \/>\u00a0\u00a0\u00a0 void obiektKlasySamochodPoKliknieciuZerujLicznikPowinienGoWyzerowac (){<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/given<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 samochod.podroz(15);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/when<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 samochod.zerujLicznik();<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/then<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <em>assertThat<\/em>(samochod.pobierzPrzejechaneKilometry(), <em>equalTo<\/em>(0));<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-22cb01b elementor-widget elementor-widget-text-editor\" data-id=\"22cb01b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Sprawdzamy jeszcze raz, czy testy przechodz\u0105 \u2013 testy zako\u0144czy\u0142y si\u0119 pomy\u015blnie, przechodzimy do kolejnego cyklu i tak dalej i tak dalej.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b73980 elementor-widget elementor-widget-text-editor\" data-id=\"9b73980\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>My\u015bl\u0119, \u017ce pokr\u00f3tce przybli\u017cy\u0142em, jak wygl\u0105da tworzenie aplikacji przy metodyce TDD. Jak wida\u0107, mo\u017cna by to zrobi\u0107 zapewne szybciej bez testowania, ale w momencie, gdy ta aplikacja si\u0119 rozro\u015bnie i zdarzy si\u0119, \u017ce co\u015b nie b\u0119dzie dzia\u0142a\u0107 tak, jak powinno, to mo\u017ce by\u0107 tak, \u017ce wi\u0119cej czasu sp\u0119dzisz na szukaniu b\u0142\u0119d\u00f3w ni\u017c gdyby\u015b go po\u015bwi\u0119ci\u0142 na pisanie aplikacji w podej\u015bciu TDD. Dodatkowo, przynajmniej ja, mam ma\u0142\u0105 satysfakcj\u0119 za ka\u017cdym razem, gdy wcze\u015bniej niedzia\u0142aj\u0105cy test zapala si\u0119 na zielono.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fbc9dad elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fbc9dad\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1781a18\" data-id=\"1781a18\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d37d387 elementor-position-right elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"d37d387\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-handshake\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tPodsumowanie\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tTDD nie jest z\u0142otym \u015brodkiem na wszystko, ale gdy mamy do tego odpowiednie warunki, to stosowanie podej\u015bcia TDD pozwoli nam zaoszcz\u0119dzi\u0107 czas oraz stworzy\u0107 aplikacje, kt\u00f3rej b\u0142\u0119dy b\u0119d\u0105 znikome. Przed przyst\u0105pieniem do projektu warto si\u0119 zastanowi\u0107 nad sposobem pisania aplikacji, czy b\u0119dzie to podej\u015bcie klasyczne czy TDD. Musisz pami\u0119ta\u0107, \u017ceby dobiera\u0107 narz\u0119dzia oraz techniki do indywidualnych potrzeb projektu.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Test Driven Development Czym jest Test Driven Development (TDD)? TDD to metoda tworzenia oprogramowania, polegaj\u0105ca na r\u00f3wnoczesnym pisaniu test\u00f3w oraz kodu w\u0142a\u015bciwego. Podej\u015bcie to zak\u0142ada, \u017ce przed napisaniem w\u0142a\u015bciwej funkcjonalno\u015bci aplikacji, tworzymy test. Podczas tworzenia kodu mo\u017cna wyr\u00f3\u017cni\u0107 trzy fazy: Red, Green oraz Refactor, kt\u00f3re nast\u0119puj\u0105 po sobie. Jest to Mikrocykl, kt\u00f3ry powtarza si\u0119 w [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-326","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages\/326","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/comments?post=326"}],"version-history":[{"count":17,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages\/326\/revisions"}],"predecessor-version":[{"id":353,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages\/326\/revisions\/353"}],"wp:attachment":[{"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/media?parent=326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}