ஓரலகு சோதனைகளின் அமைப்பு

சோதனைவழி நிரலாக்கத்தைப்பற்றிய அறிமுகத்தையும், சோதனைகளின் வகைகளைப்பற்றியும் முந்தைய பதிவுகளில் அறிந்தோம். இந்த பதிவில் ஓரலகு சோதனைகளில் உள்ள கூறுகள் (Elements of unit testing) என்னவென்பதையும், அவற்றை ஒழுங்குபடுத்தும் முறை பற்றியும் அறிந்துகொள்ளலாம்.

எந்தவொரு சோதனையை எழுதும்பொழுதும் மூன்று முக்கியமான படிகளைப்பின்பற்ற வேண்டும். அவை என்னென்ன என அறிவதற்கு ஒரு எளிய உதாரணத்தை எடுத்துக்கொள்ளலாம். ஒரு விளையாட்டை உருவாக்குவதற்கான நிரலை எழுதிக்கொண்டிருப்பதாக வைத்துக்கொள்ளலாம். இந்த விளையட்டை சோதனைக்கு உட்படுத்தும்போது, இரு முக்கிய விதிகளை கடைபிடிக்கவேண்டும். ஒன்று, சோதனையை தொடங்கும் முன், விளையாட்டு முறையாக தொடங்கப்பட வேண்டும். மற்றொன்று, சோதனை முடிந்த பின் சரியான முறையில் நிறுத்தவேண்டும். அதற்கான சோதனையை எழுதி, ஓரலகு சோதனையின் கூறுகளை அடையாளம் காண முயற்சிக்கலாம்.

  1. அமைத்தல் – Setup

ஒரு சோதனையை நிகழ்த்த அதற்கான களம் சரியான முறையில் அமைக்கப்படவேண்டும். இந்த சோதனையின் முதலிரண்டு வரிகள், சோதனைக்கான மாறியை (variable) உருவாக்கி, அதன் நிலையை (object state) சரியான முறையில் அமைக்கிறது. இந்தப்படிக்கு அமைத்தல் (Setup) என்று பெயர்.

போலிகளைப்பயன்படுத்தும் சோதனைகளில், போலிகளின் மீது எதிர்பார்ப்புகளை வரையறுப்பதும் (mocking expectations), இந்த படியில் அடங்கும்.

2. வலியுறுத்தல்  – Assertion

இந்தப்படியே சோதனைகளின் மையக்கருவாகும். ஒரு செயற்கூற்றை இயக்கி அதன் வெளியீட்டை, விவரக்குறிப்புகளுடன் (specifications) ஒப்பிட்டு சரியாக இருக்கிறதா என வலியுறுத்துவது (assertion) இந்த படியின் நோக்கம். நமது சோதனையில்,

இந்த இரண்டு வரிகள் ‘createPlayer’ என்ற செயற்கூற்றை இயக்கி, அதன் வெளியீடு, ‘nil’ அல்லாத, முறைப்படி அமைந்த ஒரு object-ஆக இருக்கவேண்டும் என வலியுறுத்துகிறது.

3. தகர்த்தல் – Teardown

நமது சோதனையின் கடைசிவரி,

சோதனையை நடத்திமுடித்தபின்பு விளையாட்டை நிறுத்தவேண்டும் என்ற தேவையை நிறைவேற்றுகிறது. இந்தப்படிக்கு ‘தகர்த்தல்’ (teardown) என்று பெயர். மேலும், போலிகளுடனான தொடர்புகள் சரியான முறையில் நடைபெற்றெனவா என சரி பார்ப்பது, தரவுதளம், கோப்புகள் போன்றவை சோதனையில் பயன்பட்டிருந்தால், அவற்றை முறையாக மூடுவது ஆகியவை இப்படியில் செய்யப்படும்.

 

சோதனைகளை ஒழுங்குபடுத்தல்

ஒரு சோதனையின் அமைப்பைப்பற்றி மேலே அறிந்தோம். ஓரலகு சோதனைகளில் ஒரு வர்க்கத்தின் (class) ஒவ்வொரு செயற்கூற்றிற்கும் ஒன்றுக்கும் மேற்பட்ட சோதனைகள் இருக்கும். அவற்றை ஒழுங்குபடுத்தும் முறையை அடுத்து காண்போம்.

நிரலில் உள்ள ஒவ்வொரு வர்க்கதிற்கும், அதற்கு இணையான ஒரு சோதனைவர்க்கத்தை (TestClass) எழுதுவது, பரவலாக பின்பற்றப்படும் வழக்கமாகும். இந்த சோதனைவர்க்கங்களை Test fixture என அழைப்பர். சோதனைவர்க்கத்திலுள்ள சோதனைகளனைத்திற்கும், அமைத்தல் மற்றும் தகர்த்தல் படிகள் ஒன்று போல இருந்தால், அவற்றை சோதனைவர்க்க அளவில், பொதுவாக (setup and teardown at Test Fixture level) அமைக்கலாம்.

ஒரு திட்டத்தில் நூற்றுக்கணக்கான ஓரலகு மற்றும் ஒருங்கிணைப்பு சோதனைகள் இருக்கும். மேலும், அவை உயர்மட்ட அளவில், controller, model, service போன்ற பல அடுக்குகளுக்கான சோதனைகளாக இருக்கலாம். இது போன்ற சோதனைவர்க்கங்களின் தொகுப்பிற்கு test suite என்று பெயர். 

 

 

கட்டமைப்புகளும், அவற்றின் அமைப்பும் (Frameworks and syntax) :

ஒவ்வொரு சோதனைக்கட்டமைப்பிலும் மேற்கண்ட படிகளைச்செய்ய உதவும் வகையில் சிறப்பு செயற்கூறுகளோ, அல்லது சிறுகுறிப்புகளோ இருக்கும். Java, C# மற்றும் Ruby -க்கான பிரபலமான சோதனைக்கட்டமைப்புகளான Junit, Nunit, Rspec ஆகியவற்றில் இந்த படிகள் எவ்வாறு வரையறுக்கபட்டுள்ளன என கீழ்கண்ட அட்டவணையில் காணலாம்.

Rspec செயற்கூறுகள் (methods) Junit சிறுகுறிப்புகள் (annotations) Nunit பண்புகள் (attributes)
அமைத்தல் (Setup) before :each do

end

@Before Setup
சோதித்தல் (Testing) it ‘சோதனையின் நோக்கம்’ do

end

@Test Test
வலியுறுத்தல் (assertion) Rspec-expectation Hamcrest Nunit assertions
தகர்த்தல் after :each do

end

@After TearDown
சோதனைவர்க்கம் சோதனைக்கென தனியாக வர்க்கங்களை வரையறுப்பதற்குப்பதிலாக, describe என்ற சிறப்பு செயற்கூற்றைப்பயன்படுத்தி ஒத்த சோதனைகளைத்தொகுக்கவேண்டும். Junit 3 பதிப்பு வரை, ஒரு சோதனைவர்க்கம் TestCase என்ற வர்க்கத்திலிருந்து தருவிக்கப்பட்டதாக இருக்கவேண்டும். Junit 4 பதிப்பில் அப்படியில்லை. எனினும், சோதனைவர்க்கத்தின் இறுதியில் Test என்ற பின்னொட்டை சேர்ப்பது பரவலான வழக்கமாகும். TestFixture
சோதனைவர்க்க அளவில் அமைத்தல் before :all do

end

@BeforeClass TestFixtureSetUp
சோதனைவர்க்க அளவில் தகர்த்தல் after :all do

end

@AfterClass TestFixtureTearDown

 

 

இல. கலாராணி (lkalarani@gmail.com)

%d bloggers like this: