{"id":1441,"date":"2016-01-11T11:00:00","date_gmt":"2016-01-11T10:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=1441"},"modified":"2023-07-24T08:59:15","modified_gmt":"2023-07-24T06:59:15","slug":"reportcore-customowy-modul-raportujacy","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/reportcore-customowy-modul-raportujacy\/","title":{"rendered":"ReportCore \u2013 customowy modu\u0142 raportuj\u0105cy"},"content":{"rendered":"\n<p>W czasach skomplikowanych i wielowarstwowych system\u00f3w informatycznych prawid\u0142owe <a href=\"http:\/\/kariera.sii.pl\/akademia-sii\/\" rel=\"nofollow\" >testowanie oprogramowania<\/a> jest ogromnym wyzwaniem. Testy manualne wykonywane przez u\u017cytkownik\u00f3w s\u0105 dobrym sposobem na walidacj\u0119 aplikacji, jednak dla rozbudowanych program\u00f3w s\u0105 zbyt czasoch\u0142onne. Dlatego dobrym uzupe\u0142nieniem jest <a href=\"http:\/\/sii.pl\/landing-page-offer\/automatyzacja-testow\/\">automatyzacja test\u00f3w<\/a>. Testy\u00a0napisane raz mog\u0105 by\u0107 wykorzystywane wielokrotnie. Sprawdza si\u0119 to idealnie przede wszystkim w testach regresyjnych, gdzie drobna modyfikacja kodu wymaga wielokrotnego sprawdzenia. By\u0142oby dobrze, gdyby mo\u017cna by\u0142o uruchomia\u0107 testy codziennie w nocy a rano dostawa\u0107 pe\u0142ny raport, zgodny z oczekiwaniami, standardami Klienta. Dlatego dzisiaj pokr\u00f3tce om\u00f3wiony zostanie customowy modu\u0142 raportuj\u0105cy napisany w Visual Studio Express for Desktop, ale mo\u017cna go wykorzysta\u0107 w ka\u017cdej innej wersji Visuala.<\/p>\n\n\n\n<p>W <em>Solution<\/em> tworzymy nowy projekt, kt\u00f3ry nazywamy <em>ReportCore<\/em>. W References dodajemy niezb\u0119dne referencje wymagane przy robieniu zrzut\u00f3w ekranu, np. <em>System.Drawing<\/em>. Tworzymy 5 plikow .cs : <strong>AbstractReporter<\/strong> \u2013 klasa abstrakcyjna, w kt\u00f3rej zadeklarujemy metody odpowiedzialne za stworzenie szablonu raportu; <strong>ColorStatus<\/strong> \u2013 enum zawieraj\u0105cy zmienne odpowiedzialne za kolor pozycji w raporcie; <strong>UltimateReporter<\/strong> \u2013 klasa odpowiedzialna za tworzenie szkieletu pliku html, dziedzicz\u0105ca po klasie abstrakcyjnej; <strong>SavingReport<\/strong> \u2013 klasa zapisuj\u0105ca raport w danej lokalizacji, tworz\u0105ca folder itd.; <strong>Reporter<\/strong> \u2013 klasa w\u0142a\u015bciwa, w kt\u00f3rej wywo\u0142ujemy odpowiednie metody z <em>UltimateReporter<\/em>, aby doda\u0107 pozycj\u0119 z odpowiednim tekstem i statusem do pliku html. Ca\u0142o\u015b\u0107 opiera si\u0119 na wzorcu obserwatora, kt\u00f3ry opisany zosta\u0142 tutaj: <a href=\"http:\/\/www.oodesign.com\/observer-pattern.html\" rel=\"nofollow\" >http:\/\/www.oodesign.com\/observer-pattern.html<\/a><\/p>\n\n\n\n<p>To, jak b\u0119dzie wygl\u0105da\u0142 nasz customowy raport zale\u017cy od tego czego oczekuje Klient: czy b\u0119dzie on pokolorowany, czy b\u0119d\u0105 w nim screeny z miejsca, w kt\u00f3rym wyst\u0105pi\u0142 b\u0142\u0105d itd. Aby u\u017cy\u0107 naszego raportu, nale\u017cy w te\u015bcie stworzy\u0107 nowy obiekt Reportera, podaj\u0105c w konstruktorze nazw\u0119 testu \u2013 ta informacja zostanie dodana do ko\u0144cowego pliku html, dzi\u0119ki czemu przy puszczeniu 20 r\u00f3\u017cnych test\u00f3w dostaniemy 20 r\u00f3\u017cnych raport\u00f3w, odpowiednio zatytu\u0142owanych. W klasie GUI nale\u017cy za\u015b napisa\u0107 konstruktor, kt\u00f3ry przypisze odpowiednio instancje obiektu reporter, np.:<\/p>\n\n\n\n<p><span style=\"color: #0000ff;\">public<\/span> PurchaseGUI(<span style=\"color: #339966;\">Reporter<\/span> report)&nbsp;: <span style=\"color: #0000ff;\">base<\/span>(report){<\/p>\n\n\n\n<p>report = reporter;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Aby notyfikowa\u0107 &nbsp;kolejne kroki do raportu, nale\u017cy w metodach w klasie GUI wywo\u0142ywa\u0107 funkcj\u0119 <em>Notify()<\/em>, kt\u00f3ra w argumentach przyjmie tre\u015b\u0107, jak\u0105 ma wpisa\u0107 do raportu oraz status, dzi\u0119ki czemu ustawiony zostanie odpowiedni kolor. Gotowy raport mo\u017ce wygl\u0105da\u0107 jak poni\u017cej:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/01\/art.png\"><img decoding=\"async\" width=\"902\" height=\"280\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/01\/art.png\" alt=\"ReportCore - przyk\u0142ad raportu\" class=\"wp-image-1443\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/01\/art.png 902w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/01\/art-300x93.png 300w\" sizes=\"(max-width: 902px) 100vw, 902px\" \/><\/a><figcaption class=\"wp-element-caption\">ReportCore &#8211; przyk\u0142ad raportu<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Chcesz lepiej zrozumie\u0107 aplikacje i systemy, kt\u00f3re testujesz? Do\u0142\u0105cz do ModernTester, poznaj najpotrzebniejsze narz\u0119dzia, frameworki oraz j\u0119zyki programowania i \u0107wicz na specjalnie przygotowanych \u015brodowiskach testowych: <a href=\"https:\/\/moderntester.sii.pl\/\" rel=\"nofollow\" >Platforma e-learningowa ModernTester<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;1441&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;0\\\/5 ( votes: 0)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;ReportCore \u2013 customowy modu\u0142 raportuj\u0105cy&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            <span class=\"kksr-muted\"><\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W czasach skomplikowanych i wielowarstwowych system\u00f3w informatycznych prawid\u0142owe testowanie oprogramowania jest ogromnym wyzwaniem. Testy manualne wykonywane przez u\u017cytkownik\u00f3w s\u0105 dobrym &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/reportcore-customowy-modul-raportujacy\/\">Continued<\/a><\/p>\n","protected":false},"author":37,"featured_media":1600,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1317],"tags":[217,159,102,216],"class_list":["post-1441","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-obserwator","tag-raportowanie","tag-visual-studio","tag-wzorzec-projektowy"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/01\/ReportCore_modul_raportujacy_testing_blogersii1.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1441"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=1441"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1441\/revisions"}],"predecessor-version":[{"id":23046,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1441\/revisions\/23046"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/1600"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=1441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=1441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=1441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}