- MySql алмаштыруу үчүн MariaDB аркылуу маалымат базасын интеграциялык тестирлөө
- Көп тилдүү колдонууну ишке ашыруу
- Файлдарды тиркемеге жана алар жөнүндө маалыматтарды маалымат базасына сактоо
Тесттин түрлөрү
сыноо деген эмне? Wiki айткандай: " Тест же тест бул системаны ар кандай кырдаалдарга жайгаштыруу жана андагы байкалуучу өзгөрүүлөргө көз салуу аркылуу системанын негизги процесстерин изилдөөнүн жолу." Башкача айтканда, бул белгилүү бир жагдайларда биздин системанын туура иштешин текшерүү.![Бирдикти тестирлөө жөнүндө бардыгы: методдор, түшүнүктөр, практика - 2](https://cdn.javarush.com/images/article/fb94b93f-ca8a-4da3-8b14-40999ea7fbf3/original.jpeg)
-
Бирдикти тестирлөө – бул системанын ар бир модулун өзүнчө сыноо болгон тесттер. Бул системанын минималдуу бөлүнүүчү бөлүктөрү болушу керек, мисалы, модулдар.
-
Системалык тестирлөө - бул колдонмонун чоңураак бөлүгүнүн же бүтүндөй системанын иштешин текшерүү үчүн жогорку деңгээлдеги тест.
-
Регрессиялык тестирлөө - жаңы функциялар же мүчүлүштүктөрдү оңдоолор колдонмонун учурдагы функционалдуулугуна таасир этеби же эски мүчүлүштүктөр кайра пайда болобу текшерүү үчүн колдонулган тест.
-
Функционалдык тестирлөө - бул тиркеменин бир бөлүгүнүн спецификацияларда, колдонуучунун окуяларында ж.б. айтылган талаптарга шайкештигин текшерүү.
Функционалдык тестирлөөнүн түрлөрү:
- тутумдун ички ишке ашырылышын билүү менен өтүнмөнүн бир бөлүгүнүн талаптарга ылайык келүүсүнө “ак куту” тести ;
- Системанын ички ишке ашырылышын билбестен, өтүнмөнүн бир бөлүгүнүн талаптарга ылайык келүүсүнө "кара куту" тести .
- Аткаруучулук тестирлөө - бул системанын же анын бир бөлүгүнүн белгилүү бир жүк астында иштөө ылдамдыгын аныктоо үчүн жазылган тесттердин бир түрү.
- Жүктөлгөн тестирлөө - стандарттык жүктөмдөрдүн астында системанын туруктуулугун текшерүү жана тиркеме туура иштеген максималдуу мүмкүн болгон чокусун табуу үчүн арналган тесттер.
- Стресс тестирлөө – стандарттуу эмес жүктөмдөрдүн астында тиркеменин иштешин текшерүү жана система кыйроого учурабай турган максималдуу мүмкүн болгон чокусун аныктоо үчүн арналган тестирлөөнүн бир түрү.
- Коопсуздук тести - системанын коопсуздугун текшерүү үчүн колдонулган тесттер (хакерлердин чабуулдарынан, вирустардан, жашыруун маалыматтарга уруксатсыз кирүүдөн жана жашоонун башка ырахаттарынан).
- Локалдаштыруу тести - бул колдонмо үчүн локалдаштыруу тести.
- Колдонуу жөндөмдүүлүгүн тестирлөө колдонуучулар үчүн колдонууга ыңгайлуулугун, түшүнүктүүлүгүн, жагымдуулугун жана үйрөнүүгө жөндөмдүүлүгүн текшерүүгө багытталган тестирлөөнүн бир түрү. Мунун баары жакшы угулат, бирок бул иш жүзүндө кантип иштейт? Бул жөнөкөй: Майк Кондун сыноо пирамидасы колдонулат:
-
Бирдик - тиркеменин ар кандай катмарларында колдонулган бирдик тесттери, тиркеменин эң кичине бөлүнүүчү логикасын текшерүү: мисалы, класс, бирок көбүнчө метод. Бул тесттер адатта тышкы логикадан мүмкүн болушунча обочолонтууга аракет кылат, башкача айтканда, тиркеменин калган бөлүгү стандарттык режимде иштеп жатат деген иллюзияны түзүүгө аракет кылат.
Бул сыноолор ар дайым көп болушу керек (башка түрлөргө караганда), алар кичинекей бөлүктөрүн сынашат жана өтө жеңил, көп ресурстарды талап кылbyte (ресурстар менен мен RAM жана убакытты билдирет).
-
Интеграция – интеграциялык тестирлөө. Ал системанын чоңураак бөлүктөрүн текшерет, башкача айтканда, бул логиканын бир нече бөлүктөрүнүн айкалышы (бир нече ыкмалар же класстар), же тышкы компонент менен иштөөнүн тууралыгы. Бул сыноолор бирдик сыноолоруна караганда азыраак болот, анткени алар оор.
Интеграция тесттеринин мисалы катары, сиз маалымат базасына туташуу жана аны менен иштөө ыкмаларынын туура аткарылышын текшерүүнү карай аласыз .
-
UI - колдонуучунун интерфейсинин иштешин текшерүүчү тесттер. Алар тиркеменин бардык деңгээлдеринде логикага таасир этет, ошондуктан аларды аягына чейин деп да аташат. Эреже катары, алардын саны азыраак, анткени алар эң оор жана эң керектүү (колдонулган) жолдорду текшериши керек.
Жогорудагы сүрөттө биз үч бурчтуктун ар кандай бөлүктөрүнүн аянттарынын катышын көрөбүз: реалдуу иште бул сыноолордун санында болжол менен бирдей пропорция сакталат.
Бүгүн биз эң көп колдонулган тесттерди - бирдик тесттерин кылдат карап чыгабыз, анткени бардык өзүн-өзү сыйлаган Java иштеп чыгуучулар аларды базалык деңгээлде колдоно алышы керек.
- JavaRush жана Habré боюнча Code Coverage жөнүндө материал ;
- негизги тест теориясы .
- Биз тестти жазып жатабыз.
- Биз тестти өткөрөбүз, ал өттүбү же жокпу (биз баары кызыл экенин көрүп жатабыз - коркпогула: ушундай болушу керек).
- Биз бул сыноону канааттандыра турган codeду кошобуз (тестти иштетиңиз).
- Биз codeду кайра түзөбүз.
- Текшере турган маалыматтарды көрсөтүү (түзмөктөр).
- Сыноодогу codeду колдонуу (сыноодогу ыкманы чакыруу).
- Натыйжаларды текшерүү жана күтүлгөндөр менен салыштыруу.
assertEquals(Object expecteds, Object actuals)
— берилүүчү an objectилердин бирдей экендигин текшерет.assertTrue(boolean flag)
— берилген маани чындыкка кайтарылганын текшерет.assertFalse(boolean flag)
— берилген маани жалган экенин текшерет.assertNull(Object object)
– an objectтин нөл экенин текшерет.assertSame(Object firstObject, Object secondObject)
— өткөн баалуулуктар бир эле an objectке тиешелүү экендигин текшерет.assertThat(T t, Matcher<T> matcher)
— t дал келүүчүдө көрсөтүлгөн шартты канааттандырарын текшерет.
![Бирдикти тестирлөө жөнүндө бардыгы: методдор, түшүнүктөр, практика - 4](https://cdn.javarush.com/images/article/a166ce03-22ed-4303-a7bf-9a52af158a7f/original.jpeg)
Бирдикти сыноонун негизги түшүнүктөрү
Сыноо камтуусу (Code Coverage) өтүнмө тестирлөөнүн сапатына негизги баа берүүнүн бири болуп саналат. Бул тесттер менен камтылган codeдун пайызы (0-100%). Практикада көп адамдар бул пайыздын артынан куушат, мен макул эмесмин, анткени алар керек эмес жерлерде тесттерди кошо башташат. Мисалы, биздин кызматта кошумча логикасы жок стандарттуу CRUD (түзүү/алуу/жаңыртуу/жок кылуу) операциялары бар. Бул ыкмалар репозиторий менен иштеген катмарга ишти тапшырган ортомчулар. Бул жагдайда, биз текшере турган эч нерсе жок: балким, бул ыкма дао ыкмасын чакырат, бирок бул олуттуу эмес. Сынактын камтылышын баалоо үчүн, адатта, кошумча куралдар колдонулат: JaCoCo, Cobertura, Clover, Эмма ж.б. Бул маселени кененирээк изилдөө үчүн, бир нече ылайыктуу макалаларды сактаңыз:![Бирдикти тестирлөө жөнүндө бардыгы: методдор, түшүнүктөр, практика - 6](https://cdn.javarush.com/images/article/ff9e2bc1-433f-4b8f-9db0-66836910aaf9/original.jpeg)
Сыноо этаптары
Сыноо үч этаптан турат:![Бирдикти тестирлөө жөнүндө бардыгы: методдор, түшүнүктөр, практика - 7](https://cdn.javarush.com/images/article/ed89764c-1c59-4397-8a3e-cd4dd8f6bf6f/original.jpeg)
Сыноо чөйрөлөрү
Ошентип, эми бизнеске киришели. Java үчүн бир нече тестирлөө чөйрөлөрү (алHowтар) бар. Алардын эң популярдуусу JUnit жана TestNG. Биздин карап чыгуу үчүн биз колдонобуз:![Бирдикти тестирлөө жөнүндө бардыгы: методдор, түшүнүктөр, практика - 8](https://cdn.javarush.com/images/article/f742fdeb-9f27-441e-b37a-40f2455e5723/original.jpeg)
assertThat(firstObject).isEqualTo(secondObject)
Бул жерде мен негизги ыкмалар жөнүндө айттым, анткени калгандары жогоруда айтылгандардын ар кандай варианттары.
Сыноо практикасы
Эми жогорудагы материалды конкреттүү мисал менен карап көрөлү. Кызмат үчүн ыкманы сынап көрөбүз - жаңыртуу. Дао катмарын эске албайбыз, анткени ал биздин демейки. Тесттер үчүн баштоону кошолу:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.2.RELEASE</version>
<scope>test</scope>
</dependency>
Ошентип, кызмат классы:
@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 - жаңыланган an objectти маалымат базасынан тартыңыз 9-14 - an objectти куруучу аркылуу түзүңүз, эгер кирген an objectте талаа бар болсо - аны орнотуңуз, эгерде жок болсо - базада эмне бар экенин калтырыңыз жана биздин тестти караңыз:
@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 — шылуундун ордуна кызматты дао катмарынан обочолонтуу
@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());
}
Бул жерде биз тесттин үч бөлүккө так бөлүнүшүн көрөбүз: 3-9 - орнотууларды орнотуу 11 - сыналган бөлүктү аткаруу 13-17 - натыйжаларды текшерүү Көбүрөөк маалымат: 3-4 - мока дао үчүн жүрүм-турумду орнотуу 5 - инстанцияны орнотуу стандартыбыздын үстүнө жаңыртабыз деп 11 - ыкманы колдонуңуз жана натыйжада мисалды алыңыз 13 - нөл эмес экенин текшериңиз 14 - натыйжанын идентификаторун жана көрсөтүлгөн ыкманын аргументтерин текшериңиз 15 - аталыштын жаңыланганын текшериңиз 16 - карап көрүңүз натыйжада cpu 17 - биз муну жаңыртуу инстанциясы талаасында орнотпогондуктан, ал ошол эле бойдон калышы керек, аны текшерип көрөлү. ![Бирдикти тестирлөө жөнүндө бардыгы: методдор, түшүнүктөр, практика - 9](https://cdn.javarush.com/images/article/b8157308-05a2-47e7-a144-14f6b7552543/original.jpeg)
![Бирдикти тестирлөө жөнүндө бардыгы: ыкмалар, түшүнүктөр, практика - 10](https://cdn.javarush.com/images/article/18f17d92-890c-4390-adc9-1aa644e1c613/original.jpeg)
![Бирдикти тестирлөө жөнүндө бардыгы: методдор, түшүнүктөр, практика - 11](https://cdn.javarush.com/images/article/78583b9a-e6c6-4a20-9aa1-cc118aa7dc34/original.jpeg)
GO TO FULL VERSION