ЦУнит у Ц

Cunit U C



ЦУнит систем се користи за извођење јединичног тестирања у Ц, што омогућава администрацију и извођење тестова. Покрива широк спектар тврдњи за тестирање најчешће коришћених типова података и користи једноставну архитектуру за креирање тестних структура. Кориснички код за тестирање је повезан са ЦУнит-ом, који је дизајниран као статичка библиотека. Можемо да испитамо перформансе задатака и функција Ц програма користећи ЦУнит тест оквир. Сваки посебан задатак Ц програма има различите улазне околности и излазна ограничења. Да бисмо користили ЦУнит за тестирање Ц програма, требало би да га прво инсталирамо у наш систем. Кораци за инсталирање ЦУнит-а су наведени у наставку.

Како користити ЦУнит Фрамеворк у Убунту 22.04

Да бисмо користили оквир за тестирање ЦУнит у нашем систему, морамо да пратимо кораке инсталације. Ови кораци се односе на Убунту 22.04 систем. Пре инсталације, прво смо ажурирали наш систем. Систем је захтевао судо привилегију да би се ажурирао командом апт.








Да би стекао судо привилегије, терминал је тражио аутентификацију од судо корисника. Затим ажурирајте системске пакете и њихове зависности, као што је приказано у наставку.




Сада смо инсталирали оквир ЦУнит користећи следећу команду. Ова команда може да инсталира пакете либцунитл, либцунитл-доц и либцунитл-дев из репозиторијума пакета.




Када се изврши команда за инсталацију ЦУнит, потребна је корисничка лозинка. Основни пакети ЦУнит су инсталирани у нашем Убунту 22.04.





Пример 1

Завршили смо корак инсталације оквира ЦУнит у претходном одељку. Сада смо тестирали метод збира и разлике да бисмо видели очекиване резултате у следећем примеру користећи ЦУнит оквир за тестирање.



#инцлуде <стдлиб.х>
#инцлуде <стринг.х>
#инцлуде <стдио.х>
#инцлуде <стринг.х>
#инцлуде 'ЦУнит/Басиц.х'

инт инит_суите ( празнина ) { повратак 0 ; }
инт цлеан_суите ( празнина ) { повратак 0 ; }

инт МиСум ( ти си а1, ти си б1 )

{
инт рес1;
рес1 =а1+б1;
повратак рес1;
}

инт МиДифф ( инт а2, инт б2 )

{
инт рес2;
рес2 =а2-б2;
повратак рес2;
}

воид тест_МиСум ( празнина )
{
ВИТХ_АССЕРТ ( 4 ==Моја сума ( два , два ) ) ;
ВИТХ_АССЕРТ ( 8 ==Моја сума ( 5 , 3 ) ) ;
ВИТХ_АССЕРТ ( два ==Моја сума ( - два , 4 ) ) ;
ВИТХ_АССЕРТ ( 7 ==Моја сума ( 0 , 7 ) ) ;
}


воид тест_МиДифф ( празнина )
{
ВИТХ_АССЕРТ ( 3 ==МиДифф ( 5 , два ) ) ;
ВИТХ_АССЕРТ ( - 4 ==МиДифф ( 4 , 8 ) ) ;
ВИТХ_АССЕРТ ( - 7 ==МиДифф ( - 3 , 4 ) ) ;
ВИТХ_АССЕРТ ( - 9 ==МиДифф ( 0 , 9 ) ) ;
}


инт маин ( празнина )
{

ЦУ_пСуите пСуите1,пСуите2 = НУЛЛ;

ако ( ЦУЕ_СУЦЦЕСС ! = ЦУ_инитиализе_регистри ( ) )
повратак ЦУ_гет_еррор ( ) ;

пСуите1 = ЦУ_адд_суите ( 'Тест Суите1' , инит_суите, цлеан_суите ) ;
ако ( НУЛЛ == пСуите1 ) {
ЦУ_цлеануп_регистри ( ) ;
повратак ЦУ_гет_еррор ( ) ;
}

ако ( ( НУЛЛ == ЦУ_адд_тест ( пСуите1, ' Тестирање функције збира ' , тест_МиСум ) ) )
{
ЦУ_цлеануп_регистри ( ) ;
повратак ЦУ_гет_еррор ( ) ;
}

ако ( ( НУЛЛ == ЦУ_адд_тест ( пСуите1, ' Тестирање функције разлике ' , тест_МиДифф ) ) )
{
ЦУ_цлеануп_регистри ( ) ;
повратак ЦУ_гет_еррор ( ) ;
}

ЦУ_басиц_рун_тестс ( ) ;

ЦУ_цлеануп_регистри ( ) ;
повратак ЦУ_гет_еррор ( ) ;
}







Прво, да бисмо генерисали ЦУнит структуру, убацили смо ЦУнит библиотеку „ЦУнит/Басиц.х“ са укљученом кључном речи. Ова Ц библиотека је за оквире за тестирање јединица и нуди једноставан излазни интерфејс конзоле. Затим смо додали две функције, “инит_суите” за иницијализацију функције пакета и “цлеан_суите” за чишћење функције пакета, у наш програм за тестирање.

Затим смо конструисали методе, „МиСум“ и „МиДифф“, које ће тестирати ЦУнит. Позвали смо конструктор за ове функције, који садржи променљиве над којима су извршене операције збира и разлике. Затим смо успоставили функцију као „тест_МиСум“ за тестирање. Унутар функције користили смо метод „ЦУ_АССЕРТ“, где се додељују инит изрази за збир. Исто као и „тест_МиСум“, конструисали смо функцију тест_МиДифф да тестирамо израз за различите операције користећи метод „ЦУ_АССЕРТ“.

Затим имамо ЦУнит руннер код унутар главног метода. Овде смо креирали два пакета, „пСуите1“ и „пСуите2“, од „ЦУ_пСуите“ методе и овим пакетима доделили вредност НУЛЛ. Направили смо ове пакете да извршимо ЦУнит тест који треба да буде регистрован у регистру тестова. Пре него што смо додали пакете у „тест_регистри“, креирали смо регистар и иницијализовали га са „иф условом“. Користили смо метод „ЦУ_инитиалзе_регистри()“ за креирање регистра за тестирање пакета.

Након тога, додали смо пСуите1 у тестни регистар позивањем методе „ЦУ_адд_суите“ ЦУнит-а. Након тога, додали смо наше тестове, „тест_МиСум“ и „тест_МиДифф“, у наведене пакете коришћењем методе „ЦУ_адд_тест()“. На крају смо приказали резултате ЦУнит теста тако што смо позвали методу „ЦУ_басиц_рун_тестс()“ и очистили регистар када су резултати успешно приказани. Грешка на коју се наиђе током извођења ЦУнит тестова ће бити избачена од стране функције „ЦУ_гет_еррор()“.

Претходна ЦУнит тест датотека је сачувана као митест.ц датотека. Извршили смо ову Ц датотеку са ГЦЦ командом. Користили смо ознаку -лцунит за извршавање ЦУнит тест датотеке. Са овом командом, наш код се компајлира. Затим смо извршили митест датотеку и она је показала очекиване резултате ЦУнит теста пошто су сви тестови прошли без икаквих грешака.

Пример 2

Имамо још један пример где смо тестирали две методе руковања датотекама, „фреад“ и „фпринтф“, ЦУнит приступом. Отворили смо и затворили привремену датотеку користећи ЦУнит тест функције. ЦУнит тест операције тестирају функције библиотеке писањем и читањем из привремене датотеке.

#инцлуде <стдлиб.х>
#инцлуде <стринг.х>
#инцлуде <стдио.х>
#инцлуде <стринг.х>
#инцлуде 'ЦУнит/Басиц.х'

статиц ФИЛЕ * фајл = НУЛЛ;
инт инит_суите1 ( празнина )
{
ако ( НУЛЛ == ( фајл = фопен ( „Моја датотека.ткт“ , 'в +' ) ) ) {
повратак -1 ;
}
друго {
повратак 0 ;
}
}

инт цлеан_суите1 ( празнина )
{
ако ( 0 ! = фцлосе ( фајл ) ) {
повратак -1 ;
}
друго {
фајл = НУЛЛ;
повратак 0 ;
}
}


воид тест_фпринтф ( празнина )
{
инт к1 = 10 ;

ако ( НУЛА ! = фајл ) {
ВИТХ_АССЕРТ ( два == фпринтф ( фајл , „П ' ) ) ;
ВИТХ_АССЕРТ ( 7 == фпринтф ( фајл , 'к1 = %д' , к1 ) ) ;
}
}

воид тест_фреад ( празнина )
{
бафер непотписаних знакова [ двадесет ] ;

ако ( НУЛА ! = фајл ) {
премотавање ( фајл ) ;
ВИТХ_АССЕРТ ( 9 == фреад ( бафер, сизеоф ( унсигнед цхар ) , двадесет , фајл ) ) ;
ВИТХ_АССЕРТ ( 0 == стрнцмп ( тампон, „П к1 = 10' , 9 ) ) ;
}
}

инт маин ( )
{
ЦУ_пСуите пСуите = НУЛЛ;
ако ( ЦУЕ_СУЦЦЕСС ! = ЦУ_инитиализе_регистри ( ) )
повратак ЦУ_гет_еррор ( ) ;
пСуите = ЦУ_адд_суите ( 'Апартман 1' , инит_суите1, цлеан_суите1 ) ;
ако ( НУЛЛ == пСуите ) {
ЦУ_цлеануп_регистри ( ) ;
повратак ЦУ_гет_еррор ( ) ;
}
ако ( ( НУЛЛ == ЦУ_адд_тест ( пСуите, „тест функције фпринтф()“ , тест_фпринтф ) ) ||
( НУЛЛ == ЦУ_адд_тест ( пСуите, „тест функције фреад()“ , тест_фреад ) ) )
{
ЦУ_цлеануп_регистри ( ) ;
повратак ЦУ_гет_еррор ( ) ;
}
ЦУ_басиц_сет_моде ( ЦУ_БРМ_ВЕРБОСЕ ) ;
ЦУ_басиц_рун_тестс ( ) ;
ЦУ_цлеануп_регистри ( ) ;
повратак ЦУ_гет_еррор ( ) ;
}







Унутар датотеке заглавља дефинисали смо стандардну библиотеку ЦУнит “ЦУнит.х/Басиц.х”. Затим смо декларисали „датотеку“ као показивач на датотеку коју користе тестови. Затим смо конструисали функцију “инит_суите1” која отвара привремену датотеку “МиФиле.ткт” и враћа нулту вредност по успеху; у супротном, биће враћена вредност различита од нуле. Да бисмо затворили датотеку, креирали смо функцију чишћења пакета, која такође враћа вредност различиту од нуле у случају неуспеха док затвара привремену датотеку. У супротном, након успешног затварања привремене датотеке, добија се нула вредност. Затим смо једноставно имплементирали функцију “тест_фпринтф” где смо убацили податке у привремену датотеку “МИфиле.ткт”. Ове тестне функције су такође потврдиле број бајтова које смо покушали да упишемо у датотеку.

Након тога, креирали смо још једну функцију за функцију „тест_фреад“ да тестирамо метод фреад. Овде смо проверили да ли су наведени карактери присутни у претходно написаним подацима помоћу функције „тест_фпринф()“. Затим, имамо главну функцију у којој се рукује тестовима који су постављени и извршени. Дефинисали смо „пСуите“ у главној функцији и иницијализовали регистратор помоћу тест функције „ЦУ_инитиализе_ресгистри“. Такође смо позвали функцију „ЦУ_адд_суите“ да бисмо додали пакет у регистар и додали наведене тестове у пакете уз помоћ функције „ЦУ_адд_тест“.

Основни ЦУнит тест интерфејси се користе на крају за приказ резултата кода. Имајте на уму да главна функција враћа „ЦУЕ_СУЦЦЕСС“ након успешног извршења и другачији код „ЦУнит_еррор“ након неуспешног извршења.

Покренули смо претходни код за ЦУнит тест, који је приказао резиме програма и поруку о методи успешних тестова.

Закључак

ЦУнит је основни оквир који пружа различите корисничке интерфејсе. Омогућава нам да управљамо тестним пакетима, тест случајевима и тестним регистрима. Кориснички интерфејси олакшавају тестирање програма и гледање резултата тих тестова. Овим чланком смо покрили оквир за тестирање ЦУнит у Ц-у. Демонстрирали смо инсталацију, а затим имплементирали два покренута програма на језику Ц. Претходни тестирани програми дали су успешне резултате.