Writing and running tests for PHP applications In Hindi
पीएचपी प्रोग्रामिंग मे पीएचपी वेब और एप्लिकेशन के लिए टेस्टिंग क्रिएट करना और लिखे गए प्रोग्राम सोर्स कोड की एक्यूरेसी और क्वालिटी को मेन्टेन बनाए रखना एक बेस्ट प्रैक्टिस है। पीएचपी प्रोग्रामिंग के लिए पीएचपीयूनिट पीएचपी प्रोग्राम वेब या एप्प्स कोड में टेस्टिंग के लिए सबसे अधिक यूज़ होने वाला फ्रेमवर्क है, जो डेवलपर को सोर्स कोड यूनिट टेस्टिंग, इंटीग्रेशन टेस्टिंग, और फंक्शनल टेस्टिंग क्रिएट और राइट करने में सक्षम करता है। यहाँ एक सामान्य यूजर के लिए पीएचपी एप्लिकेशन के लिए सोर्स कोड क्रिएट करने और उन्हें रन करने के मेथड और स्टेप के बारे में स्टेप बाय स्टेप गाइड दी गई है।

Setting up PHPUnit in PHP Programming.
पीएचपी प्रोग्रामिंग मे एक टेस्टिंग क्रिएट या स्टार्ट करने से पहले आपको अपने सिस्टम में पीएचपीयूनिट को इंस्टॉल करना पड़ेगा। यहाँ आपको अपने कंप्यूटर में पीएचपीयूनिट को इंस्टॉल करने का एक प्रॉपर मेथड कम्पोज़र के माध्यम से बताया गया है, ये फीचर्स सॉफ्टवेयर डेवलपर को अपने कस्टम प्रोजेक्ट में डिपेंडेंसी को मैनेज करने की परमिशन प्रोवाइड करता है।
Install PHPUnit with Composer in PHP.
पीएचपीयूनिट टेस्टिंग फ्रेमवर्क को ग्लोबली आर्डर में इंस्टॉल करें।
composer global require phpunit/phpunit
Install PHPUnit for your project in the following order.
composer require –dev phpunit/phpunit
ये स्टेटमेंट आपके पीएचपी प्रोजेक्ट की composer.json फ़ाइल में पीएचपीयूनिट टेस्टिंग फ्रेमवर्क को एक डेवलपमेंट डिपेंडेंसी के रूप में ऐड करता है।
Verify PHPUnit installation – अपने कंप्यूटर में पीएचपीयूनिट इंस्टॉल होने के बाद, निचे दिए गए कमांड स्टेटेमेंट को रन कर इंस्टॉलेशन को वेरीफाई करें।
./vendor/bin/phpunit –version
अगर यहाँ पीएचपीयूनिट प्रॉपर्ली इंस्टॉल है, तो यह आपके कंप्यूटर में पीएचपीयूनिट के एक्टिव वर्जन इनफार्मेशन को डिस्प्ले करता है।
Writing PHPUnit tests.
यूजर डिफाइन पीएचपीयूनिट टेस्टिंग सामान्यता आपके प्रोजेक्ट में tests/ directory में स्टोर होते हैं। यहाँ यूजर एक टेस्टिंग क्लास को PHPUnit\Framework\TestCase को एक्सटेंड कर सकते है, और यहाँ यूजर डिफाइन एप्लिकेशन के लॉजिक का टेस्टिंग करने वाली मेथड्स होनी चाहिए। यहाँ पीएचपीयूनिट फ्रेमवर्क टेस्टिंग मेथड सामान्यता आर्डर में टेस्ट प्रीफिक्स से स्टार्ट होती हैं।
Example of writing PHPUnit unit tests.
यहाँ माना की हमारे पास एक कैलकुलेट यूजर डिफाइन क्लास है, और यहाँ हम इसके मल्टीप्ल मेथड के लिए टेस्टिंग क्रिएट कर सकते हैं।
Calculator class (src/Calculat.php) example.
namespace App;
class Calculat
{
public function add($p, $q)
{
return $p + $q;
}
public function subtract($p, $q)
{
return $p – $q;
}
public function multiply($p, $q)
{
return $p * $q;
}
public function divide($p, $q)
{
if ($q == 0) {
throw new \InvalidArgumentException(“Value Division by zero”);
}
return $p / $q;
}
}
Test Class (tests/CalculatTest.php).
namespace Tests;
use PHPUnit\Framework\TestCase;
use App\Calculator;
class CalculatTest extends TestCase
{
private $calculat;
// here we Setup it before to each test
protected function setUp(): void
{
$this->calculat = new Calculat();
}
// here we use it Test for addition
public function testAdd()
{
$output = $this->calculat->add(2, 3);
$this->assertEquals(5, $ output); // Expect 2 + 3 to be 5
}
// here we use Test for subtraction
public function testSubtract()
{
$output = $this->calculat->subtract(7, 3);
$this->assertEquals(4, $ output); // Expect 7 – 3 to be 4
}
// here we use it Test for multiplication
public function testMultiply()
{
$output = $this->calculat->multiply(3, 4);
$this->assertEquals(12, $output); // Expect 3 * 4 to be 12
}
// here we use it Test for division
public function testDivide()
{
$output = $this->calculat->divide(10, 2);
$this->assertEquals(5, $output); // Expect 5 / 10 to be 2
}
// here it Test for division by zero
public function testDivideByZero()
{
$this->expectException(\InvalidArgumentException::class);
$this->calculat->divide(5, 0);
}
}
Here in this example.
- setUp() – यहाँ इस प्रोग्राम में एक यूजर डिफाइन मेथड है, जो प्रत्येक यूजर टेस्टिंग से पहले रन होती है, इसका यूज़ ऑब्जेक्ट या रिसोर्सेज सेट अप करने में किया जाता है।
- testAdd(), testSubtract(), testMultiply(), और testDivide() – यहाँ ये मल्टीप्ल कैलकुलेट टेस्टिंग मेथड हैं, जो प्रोग्राम में चेक करती हैं कि कैलकुलेट क्लास की मेथड प्रॉपर आर्डर में काम कर रही हैं या नहीं है।
- assertEquals() – यहाँ यह अभिकथन चेक करता है कि एक्सपेक्टेड वैल्यू मेथड के रिजल्ट से प्रॉपर मैच होता है या नहीं है।
- expectException() – यह अभिकथन यह अभिकथन करने के लिए यूज़ किया जाता है कि प्रोग्राम सोर्स कोड टेस्टिंग के दौरान एक एक्सेप्शन जनरेट हुआ है, यहाँ जीरो से डिवाइड करने की कंडीशन में।
Running tests in PHPUnit.
यूजर प्रोग्राम सोर्स कोड टेस्टिंग क्रिएट करने के बाद यूजर उन्हें पीएचपीयूनिट कमांड को अप्लाई करके रन कर सकते हैं।
Run all PHPUnit tests.
यूजर अपने सभी प्रोग्राम सोर्स कड़े टेस्टिंग प्रोजेक्ट में सभी टेस्टिंग को रन करने के लिए निचे दिए गए कमांड को रन करे.
./vendor/bin/phpunit
यहाँ डिफ़ॉल्ट रूप से, पीएचपीयूनिट tests/ directory में टेस्टिंग को सर्च करता है, और PHPUnit\Framework\TestCase को एक्सटेंड करने वाली क्लासेस को सर्च करता है।
Run tests from a specific file in PHPUnit.
आप अपने किसी स्पेसिफिक फ़ाइल जैसे, CalculatTest से टेस्टिंग को रन करने के लिए.
./vendor/bin/phpunit tests/CalculatTest.php
Run tests with specific options in PHPUnit.
यहाँ एक प्रोग्राम सोर्स कोड कवरेज रिपोर्ट जनरेट करें।
./vendor/bin/phpunit –coverage-html ./coverage-report
यह आपको coverage-report/directory में एक प्रोग्राम सोर्स कोड कवरेज रिपोर्ट को जनरेट करता है।
Run tests with detailed output in PHPUnit.
./vendor/bin/phpunit –verbose
Run a specific PHPUnit test method.
यहाँ यूजर अपनी मेथड का नाम इंडीकेट करके किसी टेस्टिंग क्लास में एक स्पेसिफिक टेस्टिंग मेथड को रन कर सकते हैं.
./vendor/bin/phpunit tests/CalculatTest.php –filter testAdd
Assertions in PHPUnit.
प्रोग्राम सोर्स कोड में अभिकथन पीएचपीयूनिट द्वारा यूजर प्रोग्राम कोड में कण्डीश का टेस्टिंग करने के लिए प्रोवाइड की गई मेथड हैं। यहाँ आपको कुछ मुख्य यूज़ होने वाले कई अभिकथन दिए गए हैं.
- assertEquals($expected, $actual) – यह प्रोग्राम सोर्स कोड में अभिकथन करता है कि दो वैल्यू इक्वल हैं।
- assertTrue($condition) – यह प्रोग्राम सोर्स कोड में अभिकथन करता है कि दी गई कंडीशन ट्रू है।
- assertFalse($condition) – यह प्रोग्राम सोर्स कोड में अभिकथन करता है कि प्रोग्राम में कंडीशन फाल्स है।
- assertNull($value) – यह प्रोग्राम सोर्स कोड में अभिकथन करता है कि प्रोग्राम वैल्यू शून्य है।
- assertNotNull($value) – यह प्रोग्राम सोर्स कोड में अभिकथन करता है कि प्रोग्राम में दी गई वैल्यू शून्य नहीं है।
- assertCount($expectedCount, $array) – यह प्रोग्राम सोर्स कोड में इंडीकेट करता है कि किसी ऐरे में दी गई एलिमेंट की एक स्पेसिफिक नंबर है।
- assertInstanceOf($expectedClass, $object) – यह प्रोग्राम सोर्स कोड में इंडीकेट करता है कि कोई ऑब्जेक्ट किसी इंडिकेटेड क्लास का एक एक्साम्प्ल है।
- assertGreaterThan($expected, $actual) – यह इंडीकेट करता है कि रियलटाइम वैल्यू एक्सपेक्टेड वैल्यू से अधिक है।
Organizing PHPUnit tests.
एक स्माल प्रोजेक्ट लेवल से आपका प्रोजेक्ट ग्रो होकर जैसे बढ़ता है, तो यूजर को अपने प्रोग्राम सोर्स कोड टेस्टिंग को कई टेस्टिंग क्लास और डायरेक्ट्रीज में अरेंज करने की जरूरत हो सकती है।
Test suites – पीएचपीयूनिट टेस्टिंग यूजर रिलेटेड टेस्टिग्स को टेस्टिंग सूट में ग्रुप करने की परमिशन प्रोवाइड करता है। जहा एक टेस्टिंग सूट सामान्यता तोर पर phpunit.xml कॉन्फ़िगरेशन फ़ाइल में डिफाइन किया जाता है।
Example of phpunit.xml.
<phpunit bootstrap=”vendor/autoload.php”>
<testsuites>
<testsuite name=”Calculat Test Suite”>
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
यह यूजर के लिए कॉन्फ़िगरेशन tests/directory में सभी यूजर डिफाइन टेस्टिंग को रन करेगा।
Mocking and Stubbing in PHPUnit.
कई बार यूजर को सोर्स कोड यूनिट टेस्टिंग में सोर्स कोड के उन हिस्सों को अलग करने की जरूरत होती है, जो बाहरी रिसोर्सेज या डिपेंडेंसी जैसे डेटाबेस या वेब सर्विसेज के साथ इंटरैक्ट करते हैं। यहाँ इन डिपेंडेंसी को फॉलो करने के लिए मॉक और स्टब का यूज़ किया जाता है।
Example of mocking a dependency.
यहाँ माना कि यूजर के पास एक UserService क्लास है, जो मौजूदा डेटाबेस से यूजर को लाने के लिए UserRepository पर डिपेंड करता है। यहाँ आप UserService का अलग से टेस्टिंग करने के लिए UserRepository का मॉक कर सकते हैं।
namespace App;
class UserService
{
private $userRepository;
public function __construct(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
public function getUserById($id)
{
return $this->userRepository->find($id);
}
}
यहाँ सोर्स कोड टेस्टिंग में यूजर रियलटाइम डेटाबेस के साथ इंटरैक्ट किए बिना एक स्पेसिफिक रिजल्ट रिटर्न करने के लिए UserRepository का मॉक कर सकते हैं.
namespace Tests
use PHPUnit\Framework\TestCase;
use App\UserService;
use App\UserRepository;
class UserServiceTest extends TestCase
{
public function testGetUserById()
{
$mockRepository = $this->createMock(UserRepository::class);
$mockRepository->method(‘find’)->willReturn([‘id’ => 1, ’emp_name’ => ‘Harry Deora’]);
$userService = new UserService($mockRepository);
$user = $userService->getUserById(1);
$this->assertEquals([‘id’ => 1, ’emp_name’ => ‘Harry Deora’], $user);
}
}
यहाँ यूजर को UserRepository का मॉक किया गया है, और यूजर रियलटाइम डेटा सोर्स से इंडिपेंडेंट आर्डर में UserService को टेस्टिंग कर सकते हैं।
Test-Driven Development (TDD) with PHPUnit.
पीएचपीयूनिट टेस्टिंग फ्रेमवर्क का यूजर ज्यादातर टेस्टिंग-संचालित डेवलपमेंट TDD के साथ किया जाता है, इसके मुख्य स्टेप्स इस प्रकार हैं.
- Write a failing test – यहाँ सबसे पहले यूजर एक टेस्टिंग क्रिएट कर स्टार्ट कर सकते है, जो कैपेबिलिटी के एक छोटे से हिस्से के एक्सपेक्टेड बिहैवियर को एक्सप्लेन करता हो।
- Write code – यहाँ यूजर एक टेस्टिंग को पास करने के लिए पर्याप्त प्रोग्राम सोर्स कोड क्रिएट करे।
- Refactor – यहाँ यह तय करते हुए प्रोग्राम सोर्स कोड में इम्प्रोवेंमेंट करें कि टेस्टिंग अभी भी पास हो।
यूजर इन स्टेप्स को फॉलो करके, यूजर यह तय कर सकते हैं कि यूजर के द्वारा प्रोग्राम सोर्स कोड को कम्प्लीटली टेस्टिंग किया गया है, और वह एक्सपेक्टेड आउटपुट के अकॉर्डिंग बिहेव करता है।
Steps to get started with PHPUnit.
- सबसे पहले अपने कंप्यूटर में कंपोज़र के माध्यम से पीएचपीयूनिट को इंस्टॉल करें।
- PHPUnit\Framework\TestCase को एक्सटेंड करने वाली टेस्टिंग क्लासेज क्रिएट कर टेस्टिंग लिखें।
- अपने प्रोग्राम सोर्स कोड में दी गई प्रोग्राम सोर्स कंडीशन को चेक करने के लिए पीएचपीयूनिट अभिकथन को यूज़ करें।
- अब जरूरत पड़ने पर पीएचपीयूनिट कमांड को यूज़ करके टेस्टिंग को रन करे।
Conclusion on Writing and running tests for PHP applications.
यूजर प्रोग्राम सोर्स कोड में पीएचपीयूनिट का यूज़ करके टेस्टिंग लिखना और रन करना पीएचपी एप्लिकेशन डेवलपमेंट का एक इम्पोर्टेन्ट पार्ट है। यहाँ यूजर यह तय करने में हेल्प करता है कि यूजर का प्रोग्राम कोड एक्सपेक्टेड वर्क करे, प्रोग्राम सोर्स कोड मेंटेनेंस को इजी बनाता है, और डेवेलपर को रीफैक्टरिंग या नई फीचर्स को ऐड करते टाइम यूजर को कॉन्फिडेंस प्रोवाइड करता है। यूजर इन स्टेप्स को फॉलो करके, यूजर अपने एप्लिकेशन का अच्छी तरह से सोर्स कोड टेस्टिंग करते हुए क्लियर और रिलाएबल प्रोग्राम सोर्स कोड को क्रिएट कर सकते है।

