JavaRush /Java Blog /Random-TK /Java bölüm synagy: usullar, düşünjeler, amaly

Java bölüm synagy: usullar, düşünjeler, amaly

Toparda çap edildi
Bu gün synaglar bilen baglanyşykly bolmadyk programmany tapmak kyn, şonuň üçin bu mowzuk täze döredilenler üçin has möhümdir: synaglar bolmasa hiç ýere baryp bolmaz. Mahabat hökmünde, öňki makalalarymy görmegiňizi maslahat berýärin. Olaryň käbiri synaglary öz içine alýar (hatda makalalar gaty peýdaly bolar):
  1. MySql-i çalyşmak üçin MariaDB ulanyp maglumat bazasynyň integrasiýa synagy
  2. Köp dilli programmany durmuşa geçirmek
  3. Faýllary programma we olar hakda maglumatlary maglumat bazasyna ýazdyrmak
Synagyň haýsy görnüşleriniň prinsipde ulanylýandygyny gözden geçireliň we şondan soň birlik synagy barada bilmeli zatlaryňyzy jikme-jik öwreneris.

Synagyň görnüşleri

Synag näme? Wikiniň aýdyşy ýaly: " Synag ýa-da synag, ulgamy dürli ýagdaýlara ýerleşdirmek we ondaky göze ilýän üýtgeşmeleri yzarlamak arkaly ulgamyň esasy proseslerini öwrenmegiň usulydyr." Başgaça aýdylanda, bu käbir ýagdaýlarda ulgamymyzyň dogry işlemeginiň synagydyr. Bölüm synagy barada hemme zat: usullar, düşünjeler, amaly - 2Geliň, synaglaryň haýsy görnüşleriniň bardygyny göreliň:
  1. Bölüm synagy ulgamyň her modulyny aýratynlykda barlamakdan ybaratdyr. Bularyň ulgamyň minimal bölünýän bölekleri bolmagy islenýär, mysal üçin modullar.

  2. Ulgam synagy, has uly bir programmanyň ýa-da umuman ulgamyň işleýşini barlamak üçin ýokary derejeli synagdyr.

  3. Regressiýa synagy, täze aýratynlyklaryň ýa-da näsazlyklaryň düzedilmeginiň programmanyň bar bolan işleýşine täsir edýändigini ýa-da köne näsazlyklaryň ýüze çykýandygyny barlamak üçin ulanylýan synagdyr.

  4. Funksional synag, programmanyň bir böleginiň spesifikasiýalarda, ulanyjy hekaýalarynda we ş.m. talaplara laýyklygyny barlaýar.

    Funksional synagyň görnüşleri:

    • Programmanyň bir bölegini ulgamyň içerki ornaşdyrylyşyny bilmek bilen talaplaryň ýerine ýetirilmegi üçin “ak guty” synagy ;
    • Ulgamyň içerki durmuşa geçirilişini bilmezden programmanyň bir böleginiň talaplara laýyk gelmegi üçin “gara guty” synagy .
  5. Öndürijilik synagy ulgamyň ýa-da bir böleginiň belli bir ýüküň aşagynda işleýän tizligini kesgitlemek üçin ýazylan synaglaryň bir görnüşidir.
  6. Testük synagy - adaty ýükleriň aşagynda ulgamyň durnuklylygyny barlamak we programmanyň dogry işleýän iň ýokary derejesini tapmak üçin döredilen synaglar.
  7. Stress synagy, adaty däl ýükler astynda programmanyň işleýşini barlamak we ulgamyň ýykylmajak iň ýokary derejesini kesgitlemek üçin döredilen synag görnüşidir.
  8. Howpsuzlyk synagy - ulgamyň howpsuzlygyny barlamak üçin ulanylýan synaglar (hakerleriň hüjümlerinden, wiruslardan, gizlin maglumatlara rugsatsyz girmekden we durmuşyň beýleki lezzetlerinden).
  9. Lokalizasiýa synagy , bir programma üçin lokalizasiýa synagydyr.
  10. Peýdalylygy barlamak, ulanyjylar üçin ulanylyşyny, düşnükliligini, özüne çekijiligini we öwrenip boljakdygyny barlamaga gönükdirilen synag görnüşidir.
  11. Bularyň hemmesi gowy ýaly, ýöne iş ýüzünde nähili işleýär? Bu ýönekeý: Maýk Konyň synag piramidasy ulanylýar: Bölüm synagy barada hemme zat: usullar, düşünjeler, amaly - 4Bu piramidanyň ýönekeýleşdirilen görnüşi: indi ol kiçi böleklere bölünýär. Emma bu gün iň ýönekeý warianty ýoýmarys we pikir etmeris.
    1. Bölüm - programmanyň dürli gatlaklarynda ulanylýan birlik synaglary, programmanyň iň kiçi bölünýän logikasyny synap görmek: mysal üçin synp, ýöne köplenç usul. Bu synaglar, adatça, daşarky logikadan mümkin boldugyça izolirlemäge, ýagny programmanyň galan böleginiň adaty tertipde işleýändigi baradaky illýuziýany döretmäge synanyşýarlar.

      Elmydama bu synaglaryň köpüsi bolmaly (beýleki görnüşlerden has köp), sebäbi olar ownuk bölekleri synap görýärler we gaty ýeňil, köp serişde sarp etmeýärler (çeşmeler boýunça RAM we wagt diýmek isleýärin).

    2. Integrasiýa - integrasiýa synagy. Ulgamyň has uly böleklerini, ýagny birnäçe logikanyň (birnäçe usul ýa-da synp) utgaşmasy ýa-da daşarky komponent bilen işlemegiň dogrulygyny barlaýar. Adatça bu synaglar birlik synaglaryndan has az bolýar, sebäbi olar has agyr.

      Integrasiýa synaglarynyň mysaly hökmünde maglumat bazasyna birikmegi we onuň bilen işleýän usullaryň dogry ýerine ýetirilişini barlamagy göz öňünde tutup bilersiňiz .

    3. UI - ulanyjy interfeýsiniň işleýşini barlaýan synaglar. Programmanyň ähli derejelerinde logika täsir edýärler, şonuň üçinem olara ahyrzamana diýilýär. Düzgün bolşy ýaly, olaryň sany gaty az, sebäbi olar iň agyr we iň zerur (ulanylýan) ýollary barlamalydyrlar.

      Aboveokardaky suratda üçburçlugyň dürli bölekleriniň meýdanlarynyň gatnaşygyny görýäris: hakyky işde bu synaglaryň sanynda takmynan deň paý saklanýar.

      Bu gün iň köp ulanylýan synaglara - birlik synaglaryna has içgin serederis, sebäbi öz-özüne hormat goýýan Java döredijileriniň hemmesi olary esasy derejede ulanmagy başarmaly.

    Bölüm synagynyň esasy düşünjeleri

    Synag gurşawy (Kod örtügi), synag synagynyň hiline esasy baha berişlerden biridir. Synaglar bilen örtülen koduň göterimi (0-100%). Iş ýüzünde, köpler zerur däl ýerlerinde synaglary goşup başlaýanlygy sebäpli, men ylalaşmaýan bu göterimi kowýarlar. Mysal üçin, hyzmatymyzda goşmaça logika bolmazdan standart CRUD (döretmek / almak / täzelemek / aýyrmak) amallary bar. Bu usullar diňe ammar bilen işleýän gatlagyň işine araçydyr. Bu ýagdaýda synag etjek zadymyz ýok: belki bu usul Tao-dan bir usul diýip atlandyrýarmy, ýöne bu çynlakaý däl. Synag gurşawyna baha bermek üçin adatça goşmaça gurallar ulanylýar: JaCoCo, Cobertura, Clover, Emma we ş.m. Bu meseläni has jikme-jik öwrenmek üçin birnäçe amatly makalany saklaň: TDD (Synag bilen dolandyrylýan ösüş) - synagdan geçýän ösüş. Bu çemeleşmede, ilki bilen, belli bir kody barlaýan synag ýazylýar. Gara guty synagy bolup çykýar: girişde nämäniň bardygyny bilýäris we çykyşda näme bolmalydygyny bilýäris. Bu kod köpeltmekden gaça durýar. Synaga esaslanýan ösüş, programmanyň her kiçi işleýşi üçin synaglary taslamak we ösdürmek bilen başlaýar. TDD çemeleşmesinde ilki bilen koduň näme etjekdigini kesgitleýän we tassyklaýan synag işlenip düzülýär. TDD-iň esasy maksady kody has düşnükli, has ýönekeý we ýalňyşsyz etmekdir. Bölüm synagy barada hemme zat: usullar, düşünjeler, amaly - 6Çemeleşme aşakdaky böleklerden durýar:
    1. Synagymyzy ýazýarys.
    2. Synagdan geçdikmi, geçdikmi ýa-da ýokmy (hemme zadyň gyzyl reňkdigini görýäris - doňmaň: ine şeýle bolmaly).
    3. Bu synagy kanagatlandyrmaly kod goşýarys (synagy işlediň).
    4. Kody üýtgedýäris.
    Bölüm synaglarynyň synag awtomatlaşdyryş piramidasyndaky iň kiçi elementlerdigine esaslanyp, TDD olara esaslanýar. Bölüm synaglarynyň kömegi bilen islendik synpyň iş logikasyny synap bileris. BDD (Özüňi alyp barşyň ösüşi) - özüni alyp barşyň üsti bilen ösüş. Bu çemeleşme TDD-e esaslanýar. Has takygy, ösüşe gatnaşýan her bir adam üçin ulgamyň özüni alyp barşyny görkezýän düşnükli dilde (köplenç iňlis dilinde) ýazylan mysallary ulanýar. Bu termini has çuňňur öwrenmeris, sebäbi bu esasan synagçylara we işewür analitiklere täsir edýär. Test Case - synag astyndaky koduň ýerine ýetirilişini barlamak üçin zerur ädimleri, aýratyn şertleri we parametrleri beýan edýän skript. Gurluş, synag astyndaky usulyň üstünlikli ýerine ýetirilmegi üçin zerur synag gurşawynyň ýagdaýydyr. Bu obýektleriň öňünden kesgitlenen toplumy we ulanylýan şertlerde özlerini alyp barşy.

    Synag etaplary

    Synag üç basgançakdan ybarat:
    1. Synag ediljek maglumatlary görkezmek (gurallar).
    2. Synag astyndaky kody ulanmak (synag astyndaky usuly çagyrmak).
    3. Netijeleri barlamak we garaşylýanlar bilen deňeşdirmek.
    Bölüm synagy barada hemme zat: usullar, düşünjeler, amaly - 7Synag modullygyny üpjün etmek üçin programmanyň beýleki gatlaklaryndan üzňeleşmeli. Bu stublary, masgaralary we içalylary ulanyp bolýar. Masgaralar özleşdirilip bilinýän obýektlerdir (mysal üçin, her synaga mahsus) we size jaň etmegi meýilleşdirýän jogap görnüşinde usul jaňlaryna garaşmaga mümkinçilik berýär. Garaşyş barlaglary Mock obýektlerine jaňlar arkaly amala aşyrylýar. Stubs - synag wagtynda jaňlara gaty simli jogap beriň. Şeýle hem, jaň barada maglumatlary saklap bilerler (mysal üçin, parametrler ýa-da bu jaňlaryň sany). Bular käwagt öz terminleri - içaly ( içaly ) diýilýär . Käwagt bu sözler stub we masgara bolýar: tapawut, stub hiç zady barlamaýar, diňe belli bir ýagdaýy simulasiýa edýär. Masgaralamak, garaşýan zat. Mysal üçin, berlen synp usuly belli bir gezek atlandyrylmalydyr. Başga bir söz bilen aýdanyňda, synagyňyz hiç haçan saman sebäpli bozulmaz, ýöne masgaraçylyk sebäpli döwülip biler.

    Synag gurşawy

    Indi bolsa işe gireliň. Java üçin birnäçe synag gurşawy (çarçuwasy) bar. Olardan iň meşhury JUnit we TestNG. Gözden geçirmek üçin ulanýarys: Bölüm synagy barada hemme zat: usullar, düşünjeler, amaly - 8JUnit synagy, diňe synag üçin ulanylýan synpda bar bolan usul. Bir klas, adatça, ahyrynda + Test bilen synag edýän synpy bilen atlandyrylýar. Mysal üçin, CarService → CarServiceTest. “Maven” gurluşyk ulgamy synag meýdançasynda şeýle synplary awtomatiki usulda öz içine alýar. Aslynda bu klasa synag synpy diýilýär. Esasy düşündirişlerden azajyk geçeliň: @Test - bu usulyň synag usuly hökmünde kesgitlemesi (aslynda bu bellik bilen bellenen usul birlik synagydyr). @ Öňünden - her synagdan öň ýerine ýetiriljek usuly belleýär. Mysal üçin, synp synag maglumatlaryny doldurmak, giriş maglumatlary okamak we ş.m. @ Soňra - her synagdan soň çagyryljak usulyň üstünde goýulýar (maglumatlary arassalamak, deslapky bahalary dikeltmek). @BeforeClass - usulyň üstünde ýerleşdirildi - @Before meňzeş. Thisöne bu usul belli bir synp üçin ähli synaglardan öň diňe bir gezek çagyrylýar we şonuň üçin statik bolmaly. Synag bazasyny götermek ýaly has agyr amallary ýerine ýetirmek üçin ulanylýar. @AfterClass @ BeforeClass-yň tersidir: belli bir synp üçin bir gezek ýerine ýetirilýär, ýöne ähli synaglardan soň ýerine ýetirilýär. Mysal üçin, dowamly çeşmeleri arassalamak ýa-da maglumat bazasyndan aýyrmak üçin ulanylýar. @Ignore - aşakdaky usulyň ýapykdygyny we umumy synaglar geçirilende hasaba alynmajakdygyny belleýär. Dürli ýagdaýlarda ulanylýar, mysal üçin, esasy usul üýtgedilen bolsa we synagy täzeden geçirmäge wagt ýok bolsa. Şeýle ýagdaýlarda düşündiriş goşmak hem maslahat berilýär - @Ignore ("Käbir düşündiriş"). @ Synag (garaşylýan = Expression.class) - otrisatel synaglar üçin ulanylýar. Bular ýalňyşlyk ýüze çykan halatynda usulyň özüni alyp barşyny barlaýan synaglar, ýagny synag usulyň käbir kadadan çykmalara garaşýandygyny görkezýär. Şeýle usul @Test düşündiriş bilen görkezilýär, ýöne tutmakda ýalňyşlyk bilen. @ Synag (gutarmak = 100) - usulyň 100 millisekuntdan geçmeýändigini barlaýar. @Mock - berlen obýekti masgaralamak üçin bir meýdan ulanylýar (bu Junit kitaphanasyndan däl-de, Mokitodan) we bize gerek bolsa, degişmäniň özüni alyp barşyny belli bir ýagdaýda kesgitläris. , göni synag usulynda. @RunWith (MockitoJUnitRunner.class) - usul synpyň üstünde ýerleşdirildi. Bu, synaglary geçirmek üçin düwme. Ylgaýanlar dürli bolup bilerler: mysal üçin aşakdakylar bar: MockitoJUnitRunner, JUnitPlatform, SpringRunner we ş.m.). JUnit 5-de @RunWith düşündirişi has güýçli @ExtendWith düşündirişi bilen çalşyryldy. Netijeleri deňeşdirmegiň käbir usullaryna göz aýlalyň:
    • assertEquals(Object expecteds, Object actuals)- iberilen obýektleriň deňdigini ýa-da ýokdugyny barlaýar.
    • assertTrue(boolean flag)- geçen bahanyň dogrudygyny ýa-da ýokdugyny barlaýar.
    • assertFalse(boolean flag)- geçen bahanyň ýalňyşdygyny ýa-da ýokdugyny barlaýar.
    • assertNull(Object object)- obýektiň ýokdugyny ýa-da ýokdugyny barlaýar.
    • assertSame(Object firstObject, Object secondObject)- geçen bahalaryň şol bir obýekte degişlidigini barlaýar.
    • assertThat(T t, Matcher<T> matcher)- t-de gabat gelýän şerti kanagatlandyrýandygyny ýa-da ýokdugyny barlaýar.
    Assertj-den peýdaly deňeşdirme formasy hem bar - assertThat(firstObject).isEqualTo(secondObject) Bu ýerde esasy usullar hakda gürleşdim, galanlary ýokardakylaryň dürli üýtgeşiklikleri.

    Synag amaly

    Indi belli bir mysal ulanyp, ýokardaky materiallara seredeliň. Hyzmat usulyny täzeläris - täzeläris. Dao gatlagyny göz öňünde tutmarys, sebäbi bu biziň başlangyç. Synaglar üçin başlangyç goşalyň:
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <version>2.2.2.RELEASE</version>
       <scope>test</scope>
    </dependency>
    Şeýlelikde, hyzmat synpy:
    @Service
    @RequiredArgsConstructor
    public class RobotServiceImpl implements RobotService {
       private final RobotDAO robotDAO;
    
       @Override
       public Robot update(Long id, Robot robot) {
           Robot found = robotDAO.findById(id);
           return robotDAO.update(Robot.builder()
                   .id(id)
                   .name(robot.getName() != null ? robot.getName() : found.getName())
                   .cpu(robot.getCpu() != null ? robot.getCpu() : found.getCpu())
                   .producer(robot.getProducer() != null ? robot.getProducer() : found.getProducer())
                   .build());
       }
    }
    8 - täzelenen obýekti 9-14 maglumat bazasyndan çekiň - gelýän obýektiň meýdany bar bolsa, obýektiň gurluşykçysynyň üsti bilen dörediň - goýuň, ýok bolsa - maglumatlar bazasyndaky zatlary goýuň we synagymyza serediň:
    @RunWith(MockitoJUnitRunner.class)
    public class RobotServiceImplTest {
       @Mock
       private RobotDAO robotDAO;
    
       private RobotServiceImpl robotService;
    
       private static Robot testRobot;
    
       @BeforeClass
       public static void prepareTestData() {
           testRobot = Robot
                   .builder()
                   .id(123L)
                   .name("testRobotMolly")
                   .cpu("Intel Core i7-9700K")
                   .producer("China")
                   .build();
       }
    
       @Before
       public void init() {
           robotService = new RobotServiceImpl(robotDAO);
       }
    1 - “Runner 4” - 11-ni çalşyp, hyzmaty dao gatlagyndan izolirläň - synp üçin synag guramasyny belläň (synag hamster hökmünde ulanarys) 22 - synag etjek hyzmat obýektimizi düzüň!
    @Test
    public void updateTest() {
       when(robotDAO.findById(any(Long.class))).thenReturn(testRobot);
       when(robotDAO.update(any(Robot.class))).then(returnsFirstArg());
       Robot robotForUpdate = Robot
               .builder()
               .name("Vally")
               .cpu("AMD Ryzen 7 2700X")
               .build();
    
       Robot resultRobot = robotService.update(123L, robotForUpdate);
    
       assertNotNull(resultRobot);
       assertSame(resultRobot.getId(),testRobot.getId());
       assertThat(resultRobot.getName()).isEqualTo(robotForUpdate.getName());
       assertTrue(resultRobot.getCpu().equals(robotForUpdate.getCpu()));
       assertEquals(resultRobot.getProducer(),testRobot.getProducer());
    }
    Bu ýerde synagyň üç bölege aýdyň bölünişini görýäris: 3-9 - gurallary 11 düzmek - synag edilen bölümi 13-17 ýerine ýetirmek - netijeleri barlamak Has giňişleýin maglumat: 3-4 - moka dao 5 üçin özüni alyp barşyny kesgitlemek - mysal getirmek standart 11-iň üstünde täzelenjekdigimizi - usuly ulanyň we 13-nji mysaly alarys - 14-iň nol däldigini barlaň - netijäniň ID-sini we görkezilen usul argumentlerini barlaň - 16-nyň adynyň täzelenendigini ýa-da ýokdugyny barlaň - seret cpu 17-iň netijesi - muny täzeleniş meýdanynda goýmadyklygymyz sebäpli, şol bir üýtgemeli, geliň barlap göreliň. Bölüm synagy barada hemme zat: usullar, düşünjeler, amaly - 9Başlalyň: Bölüm synagy barada hemme zat: usullar, düşünjeler, amaly - 10Synag ýaşyl, dem alyp bilersiňiz)) Şeýlelik bilen, jemläliň: synag koduň hilini ýokarlandyrýar we ösüş prosesini has çeýe we ygtybarly edýär. Softwareüzlerçe synp faýllary bilen programma üpjünçiligini täzeden dizaýn edenimizde näçeräk güýç sarp etmelidigimizi göz öňüne getiriň. Bu synplaryň hemmesi üçin ýazylan synag synaglary geçirilenden soň, ynam bilen refaktor edip bileris. Iň esasy zat, ösüş döwründe ýalňyşlyklary aňsatlyk bilen tapmaga kömek edýär. Ysigitler, bu gün meniň üçin hemmesi: halanýanlary guýuň, teswir ýazyň)) Bölüm synagy barada hemme zat: usullar, düşünjeler, amaly - 11
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION