- MySql-i çalyşmak üçin MariaDB ulanyp maglumat bazasynyň integrasiýa synagy
- Köp dilli programmany durmuşa geçirmek
- Faýllary programma we olar hakda maglumatlary maglumat bazasyna ýazdyrmak
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. Geliň, synaglaryň haýsy görnüşleriniň bardygyny göreliň:-
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.
-
Ulgam synagy, has uly bir programmanyň ýa-da umuman ulgamyň işleýşini barlamak üçin ýokary derejeli synagdyr.
-
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.
-
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 .
- Ö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.
- Testük synagy - adaty ýükleriň aşagynda ulgamyň durnuklylygyny barlamak we programmanyň dogry işleýän iň ýokary derejesini tapmak üçin döredilen synaglar.
- 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.
- Howpsuzlyk synagy - ulgamyň howpsuzlygyny barlamak üçin ulanylýan synaglar (hakerleriň hüjümlerinden, wiruslardan, gizlin maglumatlara rugsatsyz girmekden we durmuşyň beýleki lezzetlerinden).
- Lokalizasiýa synagy , bir programma üçin lokalizasiýa synagydyr.
- Peýdalylygy barlamak, ulanyjylar üçin ulanylyşyny, düşnükliligini, özüne çekijiligini we öwrenip boljakdygyny barlamaga gönükdirilen synag görnüşidir. Bularyň hemmesi gowy ýaly, ýöne iş ýüzünde nähili işleýär? Bu ýönekeý: Maýk Konyň synag piramidasy ulanylýar: Bu 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.
-
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).
-
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 .
-
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.
- JavaRush we Habré - de kod örtügi barada material ;
- esasy synag teoriýasy .
- Synagymyzy ýazýarys.
- Synagdan geçdikmi, geçdikmi ýa-da ýokmy (hemme zadyň gyzyl reňkdigini görýäris - doňmaň: ine şeýle bolmaly).
- Bu synagy kanagatlandyrmaly kod goşýarys (synagy işlediň).
- Kody üýtgedýäris.
- Synag ediljek maglumatlary görkezmek (gurallar).
- Synag astyndaky kody ulanmak (synag astyndaky usuly çagyrmak).
- Netijeleri barlamak we garaşylýanlar bilen deňeşdirmek.
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.
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ň:Synag etaplary
Synag üç basgançakdan ybarat: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: JUnit 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ň: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ň. Başlalyň: Synag ý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ň))
GO TO FULL VERSION