JavaRush /Java Blog /Random-TK /JavaRush üçin JUnit ýa-da öýde synag barada azajyk.
Sdu
Dereje

JavaRush üçin JUnit ýa-da öýde synag barada azajyk.

Toparda çap edildi
Taslamaňyzy barlamak üçin synag maglumatlaryny onlarça gezek ýazmakdan ýadadyňyzmy? Pişige hoş geldiňiz, size näme edip biljekdigiňizi aýdaryn. Bu materialyň esasy maksady, dürli parametrler bilen çözülýän meseläniň başlamagyny awtomatlaşdyrmak we deslapky kody üýtgetmezden netijeleri barlamak bolar. Adyndan eýýäm düşünşiňiz ýaly, bu ýönekeý meselede esasy kömekçimiz JUnit bolar . Bölüm synagy we birlik synaglary hakda entek eşitmedik bolsaňyz , azajyk dynç almagy we bu düşünjeler bilen tanyşmagyňyzy maslahat berýärin, bagtymyza internetde ýeterlik maglumat bar. , Ok, islemeýärsiňizmi? Bolýar, bolýar, bolup geçýän zatlara düşünmek üçin bu uly mesele bolmaz diýip pikir edýärin. Galyberse-de, umuman synagyň we synagyň nämedigini bilýärsiňizmi? Her gezek işiňizi başlanyňyzda, başlangyç maglumatlary giriziň we netijäni görjek zadyňyz bilen deňeşdiriň.
Salam, dünýä JUnit!
JUnit näme? Taslamanyň resmi web sahypasynda aşakdaky düşündirişleri okap bileris:
JUnit gaýtalanýan synaglary ýazmak üçin ýönekeý çarçuwadyr. Bölüm synag çarçuwalary üçin xUnit arhitekturasynyň mysaly.
Biziň üçin bu, usullarymyz programmamyz bilen täsirleşjek, döredilen netijäni salgylanma bilen deňeşdirip, gabat gelmeýän bolsa bize habar bermek üçin ýörite taýýarlanan synplary ýazmak ukybyny aňladýar. Principleörelge düşünmek üçin ýönekeý bir meselä serediň. Biziň kömekçi synpymyz bar diýeliň, usullaryndan biri int görnüşiniň iki üýtgeýjisini alýar we jemini yzyna gaýtaryp berýär: JavaRush üçin JUnit ýa-da öýde synag barada azajyk.  - 1 Bu, synap görjek funksiýamyz. Bagtymyza, halaýan IDEA-da eýýäm synaglary çalt döretmek üçin zerur zatlaryň hemmesi bar, kursory synp deklarasiýa setirine ýerleşdirmek, "Alt + Enter" basyň we kontekst menýusynda "Synag döretmek" saýlaň: Nirede kesgitlenenden JavaRush üçin JUnit ýa-da öýde synag barada azajyk.  - 2 soň synag döretmeli, IDEA synag kitaphanasyny saýlamagy teklip edýär (bu materialda men JUnit4 ulanýaryn; kitaphana synplarynyň taslama birikdirilmegi üçin "Düzediş" düwmesine basmaly), synag usullary we goşmaça wariantlary. JavaRush üçin JUnit ýa-da öýde synag barada azajyk.  - 3 IDE synag synpynyň şablonyny döreder: ClassName = TestClassName + "Test" MethodName = "test" + TestMethodName JavaRush üçin JUnit ýa-da öýde synag barada azajyk.  - 4 Diňe usul usulyny doldurmaly. “Assertions” diýlip atlandyrylýan usul, JUnit tarapyndan üpjün edilen usullar bu meselede kömek eder . Aönekeýleşdirilen görnüşde, olaryň işi şuňa meňzeýär: garaşylýan netije we synag astyndaky usuly çagyrmagyň netijesi .assert * usulyna geçýär; amatly bolmagy üçin ilkinji parametr hökmünde düşündiriş habaryny goşup bilersiňiz. Synag wagtynda parametrler gabat gelmese, size bu barada habar berler. Adaty synp ýaly ýerine ýetirmek üçin synag synpyny açyp bilersiňiz, men Ctrl + Shift + F10 açar kombinasiýasyny ulanmagy makul bildim JavaRush üçin JUnit ýa-da öýde synag barada azajyk.  - 5
Geliň, meseläni kesgitläliň
Teoriýa boýunça hemme zat ýönekeý we owadan, ýöne teklip edilýän mysalyň çäginde aslynda beýle zerur däl; iki sany san goşmak üçin kompýutere ynanyp bileris. JavaRush okuwçylary tarapyndan çözülen hakyky meseleler bilen zatlaryň nähili gitjekdigi bilen has gyzyklanýarys; mysal üçin, söýgüli derejäni05.lesson12.bonus03 almagy maslahat berýärin.
/ * Algoritmlerdäki mesele Programma ýazyň: 1. konsoldan N> 0 belgisini girizýär, soň bolsa konsoldan N sanlaryny girizýär 3. girizilen N sanlaryň iň köpüsini görkezýär. * /
Pozitiw, otrisatel sanlar we garyşyk toplum üçin üç synag ýazmaly.
Soňra tokaýa ...
Bize käbir garaşylmadyk ýerler garaşýar: public class UtilApp { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); //напишите здесь ваш code int n; int maximum; /* Конечно же я не буду размещать решение задачи ;) Код приведенный тут переработан для наглядности, и не в коем случае не означает что он должен присутствовать в "правильном решении" */ System.out.println(maximum); } }
  • Programma logikasy esasy () usulda ýerleşdirildi
  • Çeşme maglumatlary usula geçirilmän, klawiaturadan girizilýär.
  • Esasy () usul netijäni yzyna gaýtarmaýar, ýöne konsola çykarýar.
Birinji nokat aýratyn problemaly däl bolsa (esasy () usulyny adatdakysy ýaly atlandyryp bileris), indiki ikisi mowzuga has çuňňur girmäge we beýnimizi süzmäge mejbur edýär. Meseläniň birnäçe çözgüdini tapdym:
  1. Maksimumy aýratyn usulda tapmak üçin logikany geçirmek.
    • Taraz tarapy: Täzeden işlemek nukdaýnazaryndan dogry çemeleşme
    • Garamaýan taraplary: Programma kod, gereksiz gurluşlar bilen ulalýar, iň bolmanda bir massiw ýa-da ArrayList goşulýar (tagamyna we reňkine baglylykda ...). Diňe iň ýokary tapmagyň mehanizmi synagdan geçirilýär; maglumatlaryň girizilmegi we çykarylyşy barlanmaýar.
  2. System.in/System.out üçin örtük ýazmak.
    • Taraby: Üçünji tarap kitaphanalaryny ulanmaýarys.
    • Garamaýan taraplary: pathol täze başlanlar üçin däl. Synagy amala aşyrmagyň deňeşdirilen çylşyrymlylygy; synagdaky koduň mukdary synag edilýän ýumuşdan has köp bolup biler.
  3. Synaglar üçin goşmaça kitaphanalary ulanmak.
    • Taraz: Synaglarda arassa kod, synag ýazmagyň aňsatlygy. Synag astyndaky synpyň deslapky kody üýtgedilmeýär.
    • Garamaýan taraplary: Üçünji tarap kitaphanalaryny taslama birikdirmeli.
Dogrymy aýtsam, üçünji warianty iň haladym, geliň ony durmuşa geçirmäge synanyşalyň.
Ulgam düzgünleri
Gysga gözleg meni http://stefanbirkner.github.io/system-rules/ sahypasyna alyp gitdi we derrew munuň maňa gerekdigi belli boldy.
Java.lang.System ulanýan kodlary barlamak üçin JUnit düzgünleriniň ýygyndysy.
Geliň, kitaphanany göçürip alalyň . Ulgam düzgünleriniň işlemegi üçin zerur bolan Commons IO kitaphanasyny göçürip alyň . Iki kitaphanamyzy taslamamyz bilen baglanyşdyrýarys (Faýl -> Taslamanyň gurluşy -> Kitaphanalar -> + -> Java) we heýkeltaraşlyga başlaýarys: Işledilenden soň, wezipämiz ilkinji nomeriň aýdýan konsolundan N + 1 belgilerini girizmegiňizi haýyş edýär. näçe san onuň yzyna düşer. Ulgam düzgünlerinde bu maksatlar üçin “TextFromStandardInputStream” synpy ulanylýar. Ilki bilen synag synpymyza bu görnüşiň bir meýdanyny goşmaly we ony @Rule belligi bilen bellemeli: @Rule public final TextFromStandardInputStream systemInMock = emptyStandardInputStream(); Soňra synag usulynda zerur maglumatlary görkezýäris: systemInMock.provideText("4\n2\n6\n1\n3\n"); Görşüňiz ýaly, sanlar tekst görnüşinde iberilýär we "\ n" defis setirleri bilen bölünýär. Şundan ugur alyp, N 4-e deň bolar we iň köp {2, 6, 1, 3 numbers sanlardan gözläris. Ondan soň, synag astyndaky synpyň mysalyny döretmeli we esasy () usulyna jaň etmeli. Programmamyz systemInMock-dan maglumatlary okaýar, gaýtadan işleýär we netijäni çap edýär, etmeli zadymyz ony okamak we standart bilen deňeşdirmek. Munuň üçin ulgam düzgünleri bize “StandardOutputStreamLog” synpyny berýär. Görkezilen görnüşiň meýdançasyny goşýarys: @Rule public final StandardOutputStreamLog log = new StandardOutputStreamLog(); Çap edilen maglumatlary .getLog () usuly bilen okap bilersiňiz, täze setir nyşanlarynyň bardygyny göz öňünde tutmaly bolsaňyz, iň soňky wariantlar şeýle bolup biler: assertEquals("{2, 6, 1, 3}, max = 6", "6", log.getLog().trim()); // or assertEquals("{2, 6, 1, 3}, max = 6", "6\r\n", log.getLog()); Synaglaryň arasynda maglumat gatlagyndan gaça duruň, gündeligi arassalamaly log.clear(); Synag synpymyň doly teksti: import org.junit.Rule; import org.junit.Test; import org.junit.contrib.java.lang.system.StandardOutputStreamLog; import org.junit.contrib.java.lang.system.TextFromStandardInputStream; import static org.junit.Assert.*; import static org.junit.contrib.java.lang.system.TextFromStandardInputStream.emptyStandardInputStream; public class UtilAppTest { @Rule public final TextFromStandardInputStream systemInMock = emptyStandardInputStream(); @Rule public final StandardOutputStreamLog log = new StandardOutputStreamLog(); @Test public void testAddition() throws Exception { systemInMock.provideText("4\n2\n6\n1\n3\n"); UtilApp utilApp = new UtilApp(); utilApp.main(new String[]{}); assertEquals("{2, 6, 1, 3}, max = 6", "6", log.getLog().trim()); systemInMock.provideText("5\n-100\n-6\n-15\n-183\n-1\n"); log.clear(); utilApp.main(new String[]{}); assertEquals("{-100, -6, -15, -183, -1}, max = -1", "-1", log.getLog().trim()); systemInMock.provideText("3\n2\n0\n-1\n"); log.clear(); utilApp.main(new String[]{}); assertEquals("{2, 0, -1}, max = 2", "2", log.getLog().trim()); } } Başlaýarys we hezil edýäris. - = !!! Möhüm !!! = - Bu material DILYE maglumat maksatly üpjün edilýär; ýumuş bilen paketde daşarky synp bar bolsa, serwerde meseläniň üstünlikli synag edilmegine kepil geçemok. Serwere barlamak üçin bir mesele ibermezden ozal hemme zady aýyryň: gereksiz faýllar, gereksiz synplar, düşündiriş kody. Döreden synaglaryňyzyň üstünlikli tamamlanmagy serwerdäki synaglaryň üstünlikli tamamlanmagyny kepillendirmeýär. Bilgeşleýin teoretiki materialy çeýnemedim: birlik synag teoriýasy, JUnit bellikleri, tassyklama we ş.m., ähli materiallar tekstde görkezilen baglanyşyklarda. Synag meseleleriniň öz usullaryňyz bar bolsa, teswirlerde siziň bilen ara alyp maslahatlaşmakdan hoşal bolaryn.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION