ගෝ (Go) භාෂාවේ 1.25 අනුවාදය අලුත් testing/synctest පැකේජයක් එක් කරයි. මේකින් පෙර CI පරිසරයක අස්ථිරව පෙනුණු සමකාලීන පරීක්ෂණ දැන් පූර්ණයෙන්ම නිශ්චිත වේලාවක සිදු වේ.
පෙරදී, බොහෝ සංවර්ධකයන් time.Sleep භාවිතා කරමින් ගෝරූටිනයක් අවසන් වීමට කාලය ගණනය කරගන්නා අතර, එය CI සර්වරයේ පූර්ණ භාරය අනුව 100 ms හෝ 200 ms වගේ අස්ථිර වේලාවක් විය හැකිය. එම නිසා සාර්ථක පරීක්ෂණයක් දේශීය මැෂීනයේ සාර්ථක වුවත්, බිඩ් සේවාදායකයේ බර වැඩ නිසා අසාර්ථක විය හැකි විය.
testing/synctest පරික්ෂණයක් “බබළ” (bubble) තුළ ක්රියාත්මක කරයි. බබළ තුළ time පැකේජය වාස්තුකාලයක් (virtual clock) භාවිතා කරයි; එය ස්වයංක්රීයව ටික් නොවෙයි, පරීක්ෂණයේ සියලු ගෝරූටිනයන් “දෘඪව” (durably) අවහිර වන විට පමණක් කාලය ඉදිරියට ගෙන යයි. එම නිසා කාලය පිළිබඳ ගැටළුව ඉවත් කර, පරීක්ෂණය මිනිත්තු කිහිපයක් නොගනිමින් මයික්රො-තත්පර තුළම අවසන් වේ.
උදාහරණයක් ලෙස, Debounce ෆංක්ෂනයක් පරීක්ෂා කරන පරණ කේතය මෙසේය:func TestDebounce(t *testing.T) { … time.Sleep(200 * time.Millisecond) … } මෙය CI පරිසරයේ අස්ථිරව පටලෙයි.
එම පරීක්ෂණය synctest සමඟ ලියන විට:synctest.Test(t, func(t *testing.T) { … time.Sleep(100 * time.Millisecond) synctest.Wait() … }) ලෙස ලියයි. මෙහිදී 100 ms කාලය වාස්තුකාලය ලෙස ඉක්මනින් ඉදිරියට ගෙන යාම නිසා called ගණන සැමවිටම 1 වේ. පරීක්ෂණය මයික්රො-තත්පර තුළම සම්පූර්ණ වේ, අස්ථිරත්වය නැත.
synctest සියලු ගෝරූටිනයන් “දෘඪව” අවහිර වන තෙක් කාලය ඉදිරියට ගෙන යයි. නෙට්වර්ක් I/O, සොකට්, හෝ බාහිර සේවා ඇමතුම් වැනි අවහිර නොවන ක්රියාකාරකම් මෙම නියමයට අය නොවේ, ඒවා සඳහා වෙනත් පරීක්ෂණ ක්රම අවශ්ය වේ.
ශ්රී ලංකාවට ඇති වැදගත්කම
- ශ්රී ලංකාවේ බහුතරය CI/CD පද්ධති භාවිතා කරන නිසා, අස්ථිර පරීක්ෂණ නිසා සිදුවන බග් හෝ නිෂ්පාදන තැටිය අවම වේ.
- අධ්යාපන ආයතනවල Go පාඨමාලා අධ්යයනය කරන සිසුන්ට deterministic testing පදනමක් ලබා දෙන නිසා, concepts ඉගෙන ගැනීම පහසු වේ.
- ව්යාපාරික සංවර්ධකයින්ට වේගවත් pipeline එකක් ඇති කර, නිෂ්පාදන කාලය කෙටි කර, වියදම අඩු කර ගැනීමට උපකාරී වේ.
මෙම නවතම testing/synctest පැකේජය Go 1.25 සමඟ ස්ථාපනය කර ගැනීම, ඔබේ කේත පරීක්ෂණ වල විශ්වාසය ඉහළට ගෙන යයි. දැන් කාලය ගැන අනුමාන නොකර, සත්යය පදනම් කර පරීක්ෂණ ලියන්න.