- MySql کي تبديل ڪرڻ لاءِ ماريا ڊي بي استعمال ڪندي ڊيٽابيس جي انٽيگريشن ٽيسٽ
- گھڻ لساني ايپليڪيشن جو نفاذ
- فائلن کي ايپليڪيشن ۾ محفوظ ڪرڻ ۽ انهن بابت ڊيٽا ڊيٽابيس ڏانهن
جاچ جا قسم
هڪ امتحان ڇا آهي؟ جيئن Wiki چوي ٿو: " هڪ ٽيسٽ يا ٽيسٽ هڪ طريقو آهي جيڪو سسٽم جي بنيادي عملن جو مطالعو ڪندي سسٽم کي مختلف حالتن ۾ رکي ٿو ۽ ان ۾ قابل مشاهدو تبديلين کي ٽريڪ ڪري ٿو." ٻين لفظن ۾، اهو ڪجهه حالتن ۾ اسان جي سسٽم جي صحيح آپريشن جو امتحان آهي. خير، اچو ته ڏسون ته ڪهڙي قسم جا ٽيسٽ آهن:-
يونٽ ٽيسٽنگ ٽيسٽ آھي جنھن جو ڪم آھي سسٽم جي ھر ماڊل کي انفرادي طور تي جانچڻ. اهو ضروري آهي ته اهي سسٽم جا گهٽ ۾ گهٽ ورهايل ٽڪرا آهن، مثال طور، ماڊل.
-
سسٽم ٽيسٽنگ هڪ اعليٰ سطحي امتحان آهي جيڪو هڪ ايپليڪيشن جي وڏي حصي يا مجموعي طور سسٽم جي آپريشن کي جانچڻ لاءِ.
-
ريگريشن ٽيسٽنگ اها جانچ آهي جيڪا جانچڻ لاءِ استعمال ڪئي ويندي آهي ته ڇا نيون خاصيتون يا بگ فيڪس ايپليڪيشن جي موجوده ڪارڪردگي تي اثرانداز ٿين ٿا ۽ ڇا پراڻا بگ ٻيهر ظاهر ٿين ٿا.
-
فنڪشنل ٽيسٽنگ ايپليڪيشن جي حصي جي تعميل جي جانچ ڪري رهي آهي وضاحتن، صارف ڪهاڻيون وغيره ۾ بيان ڪيل گهرجن سان.
فنڪشنل ٽيسٽ جا قسم:
- "سفيد باڪس" ٽيسٽ ايپليڪيشن جي حصي جي تعميل جي ضرورتن سان گڏ سسٽم جي اندروني عمل جي ڄاڻ سان؛
- "ڪارو باڪس" ٽيسٽ ايپليڪيشن جي حصي جي تعميل جي ضرورتن سان بغير سسٽم جي اندروني عمل جي ڄاڻ کان سواء.
- پرفارمنس ٽيسٽنگ ٽيسٽن جو هڪ قسم آهي جنهن کي لکيو ويو آهي ته ان رفتار کي طئي ڪرڻ لاءِ جنهن تي سسٽم يا ان جو حصو ڪنهن خاص لوڊ هيٺ هلندي آهي.
- لوڊ ٽيسٽ - معياري لوڊ تحت سسٽم جي استحڪام کي جانچڻ لاءِ ۽ وڌ ۾ وڌ ممڪن چوٽي ڳولڻ لاءِ ٺهيل ٽيسٽون جنهن تي ايپليڪيشن صحيح طريقي سان ڪم ڪري ٿي.
- اسٽريس ٽيسٽنگ ٽيسٽنگ جو ھڪڙو قسم آھي جيڪو غير معياري لوڊ جي ھيٺان ايپليڪيشن جي ڪارڪردگي کي جانچڻ ۽ وڌ ۾ وڌ ممڪن چوٽي کي طئي ڪرڻ لاءِ ٺاھيو ويو آھي جنھن تي سسٽم حادثو نه ٿيندو.
- سيڪيورٽي جاچ - ٽيسٽ سسٽم جي سيڪيورٽي کي جانچڻ لاء استعمال ڪيو ويو آهي (هيڪرز جي حملن کان، وائرس، رازداري ڊيٽا تائين غير مجاز رسائي ۽ زندگي جي ٻين خوشين کان).
- لوڪلائيزيشن ٽيسٽنگ ايپليڪيشن لاءِ لوڪلائيزيشن ٽيسٽنگ آهي.
- استعمال جي جاچ جاچ جو هڪ قسم آهي جنهن جو مقصد استعمال ڪرڻ جي قابليت، سمجھڻ، ڪشش ۽ استعمال ڪندڙن جي سکيا جي صلاحيت کي جانچڻ آهي. اهو سڀ ڪجهه سٺو لڳندو آهي، پر اهو عمل ۾ ڪيئن ڪم ڪندو آهي؟ اهو سادو آهي: مائڪ ڪوهن جو ٽيسٽنگ پرامڊ استعمال ڪيو ويو آهي: هي پرامڊ جو هڪ آسان نسخو آهي: هاڻي اهو ننڍن حصن ۾ ورهايل آهي. پر اڄ اسين خراب نه ڪنداسين ۽ آسان اختيار تي غور ڪنداسين.
-
يونٽ - يونٽ ٽيسٽ ايپليڪيشن جي مختلف تہن ۾ استعمال ٿيل، ايپليڪيشن جي ننڍڙي تقسيم منطق جي جانچ ڪندي: مثال طور، هڪ طبقو، پر اڪثر ڪري هڪ طريقو. اهي تجربا اڪثر ڪري ٻاهرئين منطق کان جيترو ٿي سگهي الڳ ڪرڻ جي ڪوشش ڪندا آهن، يعني اهو وهم پيدا ڪرڻ ته باقي ايپليڪيشن معياري موڊ ۾ ڪم ڪري رهي آهي.
ھميشه انھن ٽيسٽن مان گھڻا ھئڻ گھرجي (ٻين قسمن کان وڌيڪ)، ڇاڪاڻ ته اھي ننڍا ٽڪرا آزمائيندا آھن ۽ ڏاڍا ھلڪو وزن وارا آھن، نه گھڻا وسيلا استعمال ڪن ٿا (وسيلا مان مطلب رام ۽ وقت).
-
انضمام- انضمام جي جاچ. اهو سسٽم جي وڏن ٽڪرن کي چيڪ ڪري ٿو، اهو آهي، اهو يا ته منطق جي ڪيترن ئي ٽڪرن جو ميلاپ آهي (ڪيترائي طريقن يا طبقن)، يا هڪ خارجي جزو سان ڪم ڪرڻ جي درستگي. عام طور تي انهن ٽيسٽن مان گهٽ آهن يونٽ ٽيسٽن جي ڀيٽ ۾، ڇاڪاڻ ته اهي ڳري آهن.
انٽيگريشن ٽيسٽ جي هڪ مثال طور، توهان هڪ ڊيٽابيس سان ڳنڍڻ تي غور ڪري سگهو ٿا ۽ چيڪ ڪري سگهو ٿا ته ان سان ڪم ڪندڙ طريقا صحيح ڪم ڪن ٿا .
-
UI - ٽيسٽ جيڪي يوزر انٽرفيس جي آپريشن کي چيڪ ڪن ٿا. اهي ايپليڪيشن جي سڀني سطحن تي منطق کي متاثر ڪن ٿا، ڇو ته انهن کي پڻ سڏيو ويندو آهي آخر کان آخر تائين. ضابطي جي طور تي، انهن مان ڪيترائي ٿورا آهن، ڇاڪاڻ ته اهي سڀ کان وڌيڪ وزن وارا آهن ۽ انهن کي تمام ضروري (استعمال ٿيل) رستن جي جانچ ڪرڻ گهرجي.
مٿي ڏنل شڪل ۾ اسان ٽڪنڊي جي مختلف حصن جي علائقن جو تناسب ڏسون ٿا: تقريبن ساڳيو تناسب حقيقي ڪم ۾ انهن تجربن جي تعداد ۾ برقرار رکيو ويو آهي.
اڄ اسين سڀ کان وڌيڪ استعمال ٿيل ٽيسٽن تي ويجھي نظر وجهنداسين - يونٽ ٽيسٽ، ڇو ته جاوا جا سڀ ڊولپرز انهن کي بنيادي سطح تي استعمال ڪرڻ جي قابل هوندا.
- JavaRush ۽ Habré تي ڪوڊ ڪوريج بابت مواد ؛
- بنيادي جانچ جو نظريو .
- اسان جا امتحان لکي رهيا آهيون.
- اسان امتحان هلون ٿا، ڇا اهو گذري ويو يا نه (اسان ڏسون ٿا ته هر شيء ڳاڙهو آهي - ٻاهر نه وڃو: اهو ڪيئن هجڻ گهرجي).
- اسان ڪوڊ شامل ڪيو جيڪو هن ٽيسٽ کي پورو ڪرڻ گهرجي (ٽيسٽ هلائي).
- اسان ڪوڊ ريفيڪٽر ڪريون ٿا.
- جانچڻ لاءِ ڊيٽا جي وضاحت ڪرڻ (فڪسچر).
- ٽيسٽ تحت ڪوڊ استعمال ڪندي (ٽيسٽ تحت طريقي کي سڏيندي).
- نتيجن جي جانچ ڪندي ۽ انهن جي مقابلي ۾ متوقع ماڻهن سان.
assertEquals(Object expecteds, Object actuals)
- چيڪ ڪري ٿو ته ڇا منتقل ڪيل شيون برابر آهن.assertTrue(boolean flag)
- چيڪ ڪري ٿو ته ڇا منظور ٿيل قدر صحيح موٽائي ٿو.assertFalse(boolean flag)
- چيڪ ڪري ٿو ته ڇا منظور ٿيل قدر غلط موٽائي ٿو.assertNull(Object object)
- چيڪ ڪري ٿو ته ڇا اعتراض null آهي.assertSame(Object firstObject, Object secondObject)
- چيڪ ڪري ٿو ته ڇا منظور ٿيل قدر ساڳئي اعتراض ڏانهن اشارو ڪن ٿا.assertThat(T t, Matcher<T> matcher)
- چيڪ ڪري ٿو ته ڇا t ميچر ۾ بيان ڪيل شرط کي پورو ڪري ٿو.
يونٽ ٽيسٽ جا اهم تصور
ٽيسٽ ڪوريج (ڪوڊ ڪوريج) ايپليڪيشن ٽيسٽ جي معيار جي بنيادي جائزي مان هڪ آهي. هي ڪوڊ جو سيڪڙو آهي جيڪو ڍڪيل هو ٽيسٽ (0-100٪). عملي طور تي، ڪيترائي ماڻهو هن فيصد جو تعاقب ڪن ٿا، جنهن سان مان متفق نه آهيان، ڇاڪاڻ ته اهي ٽيسٽ شامل ڪرڻ شروع ڪن ٿا جتي انهن جي ضرورت ناهي. مثال طور، اسان جي خدمت ۾ معياري CRUD (ٺاهي/حاصل/اپڊيٽ/حذف) آپريشن آهن بغير اضافي منطق جي. اهي طريقا خالص وچولي آهن جيڪي ڪم جي نمائندگي ڪن ٿا پرت کي جيڪي مخزن سان ڪم ڪن ٿيون. هن صورتحال ۾، اسان کي امتحان ڏيڻ لاء ڪجھ به نه آهي: شايد اهو طريقو Tao کان هڪ طريقو سڏيندو آهي، پر اهو سنجيده ناهي. ٽيسٽ ڪوريج جو جائزو وٺڻ لاء، اضافي اوزار عام طور تي استعمال ٿيندا آهن: JaCoCo، Cobertura، Clover، Emma، وغيره. هن مسئلي جي وڌيڪ تفصيلي مطالعي لاء، ڪجهه مناسب مضمون رکو:جاچ جا مرحلا
امتحان ٽن مرحلن تي مشتمل آهي:ٽيسٽ ماحول
تنهنڪري هاڻي اچو ته ڪاروبار ڏانهن وڃو. جاوا لاءِ ڪيترائي ٽيسٽنگ ماحول (فريم ورڪ) موجود آهن. انهن مان سڀ کان وڌيڪ مشهور آهن JUnit ۽ TestNG. اسان جي نظرثاني لاءِ، اسان استعمال ڪندا آهيون: JUnit ٽيسٽ ھڪڙو طريقو آھي جيڪو ھڪڙي طبقي ۾ موجود آھي جيڪو صرف جانچ لاءِ استعمال ڪيو ويندو آھي. ھڪڙي طبقي کي عام طور تي ساڳيو نالو ڏنو ويو آھي اھو ڪلاس جنھن جي آخر ۾ + ٽيسٽ سان جاچ ڪري رھيو آھي. مثال طور، CarService→ CarServiceTest. Maven تعمير ڪرڻ وارو نظام خودڪار طور تي امتحان واري علائقي ۾ اهڙن طبقن کي شامل ڪري ٿو. حقيقت ۾، هن طبقي کي ٽيسٽ ڪلاس سڏيو ويندو آهي. اچو ته ٿورڙي بنيادي تشريح جي ذريعي وڃون: @Test - هن طريقي جي تعريف هڪ ٽيسٽ طريقي جي طور تي (حقيقت ۾، هن تشريح سان نشان لڳل طريقو هڪ يونٽ ٽيسٽ آهي). @Before - انهي طريقي کي نشانو بڻايو جيڪو هر ٽيسٽ کان اڳ تي عمل ڪيو ويندو. مثال طور، ڪلاس ٽيسٽ ڊيٽا ڀرڻ، ان پٽ ڊيٽا پڙهڻ وغيره. @After - مٿي رکيل طريقي سان جنهن کي هر ٽيسٽ کان پوءِ سڏيو ويندو (ڊيٽا صاف ڪرڻ، ڊفالٽ ويلز بحال ڪرڻ). @BeforeClass - مٿي رکيل طريقي سان - @Before جي مطابق. پر هن طريقي کي صرف هڪ ڀيرو سڏيو ويندو آهي سڀني ٽيسٽن کان اڳ ڏنل طبقي لاءِ ۽ ان ڪري جامد هجڻ ضروري آهي. اهو وڌيڪ ڳري ڊيوٽي آپريشن ڪرڻ لاء استعمال ڪيو ويندو آهي، جهڙوڪ ٽيسٽ ڊيٽابيس کي کڻڻ. @AfterClass @BeforeClass جي برعڪس آهي: ڏنل طبقي لاءِ هڪ ڀيرو تي عمل ڪيو ويو، پر سڀني ٽيسٽن کان پوءِ عمل ڪيو ويو. استعمال ڪيو ويو، مثال طور، مسلسل وسيلن کي صاف ڪرڻ يا ڊيٽابيس کان ڌار ڪرڻ لاء. @Ignore - نوٽ ڪيو ته هيٺ ڏنل طريقو غير فعال آهي ۽ ان کي نظر انداز ڪيو ويندو جڏهن مجموعي طور تي هلندڙ ٽيسٽون. اهو مختلف ڪيسن ۾ استعمال ڪيو ويندو آهي، مثال طور، جيڪڏهن بنيادي طريقو تبديل ڪيو ويو آهي ۽ ان لاء ٽيسٽ کي ٻيهر ڪرڻ جو ڪو وقت نه هو. اهڙين حالتن ۾، اهو پڻ مشورو ڏنو ويو آهي ته وضاحت شامل ڪريو - @Ignore("ڪجهه وضاحت"). @ ٽيسٽ (متوقع = Exception.class) - استعمال ٿيل منفي ٽيسٽ لاءِ. اهي تجربا آهن جيڪي چيڪ ڪن ٿا ته هڪ طريقو ڪنهن غلطي جي صورت ۾ ڪيئن عمل ڪري ٿو، اهو آهي، ٽيسٽ طريقي جي توقع رکي ٿو ته ڪجهه استثنا اڇلائي. اهڙو طريقو @Test تشريح پاران ظاهر ڪيو ويو آهي، پر پڪڙڻ جي غلطي سان. @ ٽيسٽ (ٽائم آئوٽ = 100) - چيڪ ڪري ٿو ته اهو طريقو 100 ملي سيڪنڊن کان وڌيڪ نه آهي. @Mock - ھڪڙي ڪلاس ھڪڙي فيلڊ تي استعمال ڪيو ويندو آھي ھڪڙي ڏنل اعتراض کي ٺٺولي جي طور تي مقرر ڪرڻ لاء (اھو جونٽ لائبريري مان نه آھي، پر Mockito مان)، ۽ جيڪڏھن اسان کي ضرورت آھي، اسان ھڪڙي مخصوص صورتحال ۾ ٺٺولي جي رويي کي ترتيب ڏينداسين. ، سڌو سنئون امتحان واري طريقي ۾. @RunWith(MockitoJUnitRunner.class) - طريقو ڪلاس جي مٿان رکيل آهي. هي بٽڻ آهي ان ۾ هلندڙ ٽيسٽن لاءِ. رنر مختلف ٿي سگهن ٿا: مثال طور، هيٺيان آهن: MockitoJUnitRunner، JUnitPlatform، SpringRunner، وغيره). JUnit 5 ۾، @RunWith تشريح کي تبديل ڪيو ويو وڌيڪ طاقتور @ExtendWith تشريح. اچو ته نتيجن جي مقابلي لاء ڪجهه طريقن تي نظر رکون: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 - ڊيٽابيس مان اپڊيٽ ٿيل شئي کي ڇڪيو 9-14 - بلڊر ذريعي اعتراض ٺاهيو، جيڪڏهن ايندڙ شئي وٽ فيلڊ آهي - ان کي سيٽ ڪريو، جيڪڏهن نه - ڇڏي ڏيو جيڪو ڊيٽابيس ۾ آهي ۽ اسان جي ٽيسٽ کي ڏسو:
@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 — اسان جو رنر 4 — هڪ ماڪ 11 کي متبادل ڪندي ڊاؤ پرت کان سروس کي الڳ ڪريو — ڪلاس لاءِ هڪ ٽيسٽ ادارو مقرر ڪريو (جنهن کي اسين ٽيسٽ هيمسٽر طور استعمال ڪنداسين) 22 — هڪ سروس اعتراض سيٽ ڪريو جنهن کي اسين جانچينداسين.
@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 ناهي - نتيجو ID ۽ مخصوص طريقي جي دليلن کي چيڪ ڪريو 15 - چيڪ ڪريو ته ڇا نالو اپڊيٽ ڪيو ويو آهي 16 - ڏسو cpu 17 جي نتيجي ۾ - جيئن ته اسان هن کي اپڊيٽ مثال جي فيلڊ ۾ مقرر نه ڪيو آهي، اهو ساڳيو ئي رهڻ گهرجي، اچو ته ان کي چيڪ ڪريو. اچو ته لانچ ڪريون: ٽيسٽ سائي آهي، توهان ڪڍي سگهو ٿا)) سو، اچو ته اختصار ڪريون: ٽيسٽنگ ڪوڊ جي معيار کي بهتر بڻائي ٿي ۽ ترقي جي عمل کي وڌيڪ لچڪدار ۽ قابل اعتماد بڻائي ٿي. تصور ڪريو ته اسان کي ڪيتري محنت ڪرڻي پوندي جڏهن سوين ڪلاس فائلن سان سافٽ ويئر کي ٻيهر ڊزائين ڪرڻ. هڪ دفعو اسان وٽ انهن سڀني طبقن لاءِ يونٽ ٽيسٽ لکجي ويا آهن، اسان اعتماد سان ريفيڪٽر ڪري سگهون ٿا. ۽ سڀ کان اهم، اهو اسان کي مدد ڪري ٿو آساني سان غلطيون ڳولڻ دوران ترقي. دوستو، اڄ اهو سڀ ڪجهه منهنجي لاءِ آهي: پسند ڪريو، تبصرو لکو)))
GO TO FULL VERSION