खोज…
सिम्फनी 3 में सरल परीक्षण
अध्याय परीक्षा
यूनिट परीक्षणों का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि आपके कोड में कोई सिंटैक्स त्रुटि नहीं है और अपने कोड के तर्क का परीक्षण करने के लिए कि आप क्या उम्मीद करते हैं। त्वरित उदाहरण:
src / AppBundle / कैलक्यूलेटर / BillCalculator.php
<?php namespace AppBundle\Calculator; use AppBundle\Calculator\TaxCalculator; class BillCalculator { private $taxCalculator; public function __construct(TaxCalculator $taxCalculator) { $this->taxCalculator = $taxCalculator; } public function calculate($products) { $totalPrice = 0; foreach ($products as $product) { $totalPrice += $product['price']; } $tax = $this->taxCalculator->calculate($totalPrice); return $totalPrice + $tax; } }
src / AppBundle / कैलक्यूलेटर / TaxCalculator.php
<?php namespace AppBundle\Calculator; class TaxCalculator { public function calculate($price) { return $price * 0.1; // for example the tax is 10% } }
परीक्षण / AppBundle / कैलक्यूलेटर / BillCalculatorTest.php
<?php namespace Tests\AppBundle\Calculator; class BillCalculatorTest extends \PHPUnit_Framework_TestCase { public function testCalculate() { $products = [ [ 'name' => 'A', 'price' => 100, ], [ 'name' => 'B', 'price' => 200, ], ]; $taxCalculator = $this->getMock(\AppBundle\Calculator\TaxCalculator::class); // I expect my BillCalculator to call $taxCalculator->calculate once // with 300 as the parameter $taxCalculator->expects($this->once())->method('calculate')->with(300)->willReturn(30); $billCalculator = new BillCalculator($taxCalculator); $price = $billCalculator->calculate($products); $this->assertEquals(330, $price); } }
मैंने अपने BillCalculator वर्ग का परीक्षण किया ताकि मैं यह सुनिश्चित कर सकूं कि मेरा BillCculculator कुल उत्पादों की कीमत + 10% कर लौटाएगा। यूनिट टेस्ट में, हम अपना टेस्ट केस बनाते हैं। इस परीक्षण में, मैं २ उत्पाद प्रदान करता हूं (कीमतें १०० और २०० हैं), इसलिए कर १०% = ३० होगा। मुझे उम्मीद है कि करदाता ३० को लौटा देगा, ताकि कुल कीमत ३०० + ३० = ३३० हो जाएगी।
कार्यात्मक जॉच
इनपुट और आउटपुट का परीक्षण करने के लिए कार्यात्मक परीक्षणों का उपयोग किया जाता है। दिए गए इनपुट के साथ, मुझे आउटपुट बनाने के लिए प्रक्रिया का परीक्षण किए बिना कुछ आउटपुट की उम्मीद थी। (यह इकाई परीक्षण के साथ अलग है क्योंकि इकाई परीक्षण में, हम कोड प्रवाह का परीक्षण करते हैं)। त्वरित उदाहरण:
namespace Tests\AppBundle; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ApplicationAvailabilityFunctionalTest extends WebTestCase { /** * @dataProvider urlProvider */ public function testPageIsSuccessful($url) { $client = self::createClient(); $client->request('GET', $url); $this->assertTrue($client->getResponse()->isSuccessful()); } public function urlProvider() { return array( array('/'), array('/posts'), array('/post/fixture-post-1'), array('/blog/category/fixture-category'), array('/archives'), // ... ); } }
मैंने अपने नियंत्रक का परीक्षण किया इसलिए मैं यह सुनिश्चित कर सकता हूं कि मेरा नियंत्रक दिए गए यूआरएल के साथ 400 (नहीं मिला) या 500 (आंतरिक सर्वर त्रुटि) के बजाय 200 प्रतिक्रिया लौटाएगा।
संदर्भ:
- http://symfony.com/doc/current/best_practices/tests.html
- http://symfony.com/doc/current/book/testing.html