c সকল ইউনিট টেস্টিং সি কোড




এইচটিএমএল এর সকল ট্যাগ (24)

আমি এই গ্রীষ্মে সোজা সিটিতে লিখিত একটি এমবেডেড সিস্টেমে কাজ করেছি। এটি একটি বিদ্যমান প্রকল্প যা আমি যে কোম্পানির জন্য কাজ করেছি তা গ্রহণ করা হয়েছে। আমি জুনাইট ব্যবহার করে জাভাতে একক পরীক্ষা লেখার অভ্যাসে অভ্যস্ত হয়েছি কিন্তু বিদ্যমান কোডের জন্য ইউনিট পরীক্ষাগুলি লেখার সর্বোত্তম পদ্ধতি হিসাবে ক্ষতিগ্রস্ত হয়েছিল এবং সেইসাথে নতুন কোডটি যোগ করা হয়েছিল।

একক টেস্টিং প্লেইন সি কোড তৈরি করার কোন উপায় আছে যা ইউনিট পরীক্ষার জাভা কোড হিসাবে সহজ, উদাহরণস্বরূপ, জুনাইট ? কোন অন্তর্দৃষ্টি যা বিশেষভাবে এমবেডেড ডেভেলপমেন্ট (আর্ম-লিনাক্স প্ল্যাটফর্মের ক্রস-কম্পাইলিং) প্রয়োগ করবে তা ব্যাপকভাবে প্রশংসা করা হবে।


মিনিুনিট পড়ার পর আমি মনে করি ম্যাক্রোকে দৃঢ়ভাবে পরীক্ষা করার জন্য একটি ভাল উপায় ছিল যা আমি অনেকটা রক্ষামূলক প্রোগ্রাম কৌশল ব্যবহার করেছিলাম। তাই আমি মিনুনিটের একই ধারণাটি মানসিক চাপ দিয়ে মিশ্রিত করেছি। আপনি k0ga এর ব্লগে আমার কাঠামো (একটি ভাল নাম NoMinunit হতে পারে) দেখতে পারেন


আমি CxxTest একটি এমবেডেড সি / সি ++ পরিবেশের জন্য (প্রাথমিকভাবে C ++) ব্যবহার করি।

আমি CxxTest পছন্দ করি কারণ এটি পরীক্ষার রানার তৈরি করতে একটি পার্ল / পাইথন স্ক্রিপ্ট রয়েছে। এটি সেটআপ করার জন্য একটি ছোট ঢালের পরে (পরীক্ষার রানারটি লেখার পরে আপনাকে এখনও ছোট), এটি ব্যবহার করা খুব সহজ (নমুনা এবং দরকারী ডকুমেন্টেশন অন্তর্ভুক্ত)। সর্বাধিক কাজ 'হার্ডওয়্যার' কোড অ্যাক্সেস সেট আপ ছিল তাই আমি ইউনিট / মডিউল পরীক্ষা কার্যকরভাবে করতে পারে। তারপরে নতুন ইউনিট পরীক্ষা ক্ষেত্রে যুক্ত করা সহজ।

আগে উল্লেখ করা হয়েছে এটি একটি সি / সি ++ ইউনিট পরীক্ষা ফ্রেমওয়ার্ক। সুতরাং আপনি একটি সি ++ কম্পাইলার প্রয়োজন হবে।

CxxTest ব্যবহারকারী গাইড CxxTest উইকি


API স্যানিটি পরীক্ষক - সি / সি ++ লাইব্রেরিগুলির জন্য পরীক্ষা কাঠামো:

একটি ভাগ করা সি / সি ++ লাইব্রেরীর জন্য মৌলিক ইউনিট পরীক্ষাগুলির একটি স্বয়ংক্রিয় জেনারেটর। শিরোনামের ঘোষণাপত্রের বিশ্লেষণের মাধ্যমে API এ প্রতিটি ফাংশনের জন্য এটি যথাযথভাবে তৈরি করতে সক্ষম (বেশিরভাগ ক্ষেত্রেই তবে দুর্ভাগ্যবশত সবগুলি ক্ষেত্রে নয়) পরামিতিগুলির জন্য ইনপুট ডেটা এবং সহজ ("স্যানিটি" বা "অগভীর" -কুল্যতা) পরীক্ষা করুন নথি পত্র.

উত্পন্ন পরীক্ষার মান সহজ ব্যবহার ক্ষেত্রে গুরুতর ত্রুটি অনুপস্থিতি পরীক্ষা করতে পারবেন। টুল তৈরি এবং নির্মান পরীক্ষা চালানো এবং ক্র্যাশ সনাক্ত (segfaults), aborts, সব ধরণের emitted সংকেত, অ শূন্য প্রোগ্রাম রিটার্ন কোড এবং প্রোগ্রাম ঝুলন্ত সনাক্ত করতে পারবেন।

উদাহরণ:


আমি ফাংশন mock করার একটি উপায় খুঁজছেন শুরু করার আগে আমি একটি legacy সি অ্যাপ্লিকেশন অনেকদূর পরীক্ষা না। আমি সি ফাইলটি বিচ্ছিন্ন করতে খারাপভাবে mocks প্রয়োজন আমি অন্যদের থেকে পরীক্ষা করতে চান। আমি cmock একটি চেষ্টা দিয়েছেন এবং আমি মনে করি আমি এটা গ্রহণ করা হবে।

Cmock শিরোনাম ফাইল স্ক্যান করে এবং খুঁজে পাওয়া প্রোটোটাইপগুলির উপর ভিত্তি করে মক ফাংশন জেনারেট করে। Mocks আপনি নিখুঁত বিচ্ছিন্নতা একটি সি ফাইল পরীক্ষা করার অনুমতি দেবে। আপনাকে যা করতে হবে তা হল আপনার আসল বস্তু ফাইলগুলির পরিবর্তে আপনার পরীক্ষা ফাইলকে mocks দিয়ে লিঙ্ক করা।

Cmock এর আরেকটি সুবিধা হল এটি ম্যাক ফাংশনগুলিতে প্রেরিত প্যারামিটারগুলিকে বৈধ করবে এবং এটি আপনাকে ম্যাক্সগুলি প্রদান করা উচিত এমন ফেরত মান নির্দিষ্ট করে দেবে। এটি আপনার ফাংশনে নির্বাহের বিভিন্ন প্রবাহ পরীক্ষা করার জন্য খুবই উপযোগী।

পরীক্ষায় সাধারণত testA (), testB () ফাংশনগুলি রয়েছে যা আপনি প্রত্যাশাগুলি তৈরি করেন, পরীক্ষার জন্য কলগুলি এবং পরীক্ষাগুলি পরীক্ষা করে দেখুন।

শেষ ধাপটি ঐক্যের সাথে আপনার পরীক্ষার জন্য একটি রানার তৈরি করা হয়। Cmock ঐক্য পরীক্ষা কাঠামো বাঁধা হয়। ঐক্য অন্য যে কোন ইউনিট পরীক্ষার ফ্রেমওয়ার্ক হিসাবে শিখতে সহজ।

ভাল চেষ্টা এবং উপলব্ধি করা বেশ সহজ:

http://sourceforge.net/apps/trac/cmock/wiki

আপডেট 1

আমি তদন্ত করছি অন্য কাঠামো Cmockery হয়।

http://code.google.com/p/cmockery/

এটি একটি বিশুদ্ধ সি কাঠামো সমর্থন ইউনিট পরীক্ষার এবং mocking হয়। এটা Ruby উপর নির্ভরশীলতা নেই (Cmock বিপরীত) এবং এটি বহিরাগত libs উপর খুব সামান্য নির্ভরতা আছে।

এটি mocks সেটআপ করার জন্য আরও কিছু ম্যানুয়াল কাজ প্রয়োজন কারণ এটি কোনও কোড প্রজন্মের নয়। এটি একটি বিদ্যমান প্রকল্পের জন্য অনেকগুলি কাজ প্রতিনিধিত্ব করে না, কারণ প্রোটোটাইপগুলি অনেক পরিবর্তিত হবে না: একবার আপনার মক্কেল থাকলে, আপনাকে কিছু সময়ের জন্য এটি পরিবর্তন করতে হবে না (এটি আমার ক্ষেত্রে)। অতিরিক্ত টাইপ mocks সম্পূর্ণ নিয়ন্ত্রণ উপলব্ধ করা হয়। যদি এমন কিছু থাকে যা আপনি পছন্দ করেন না তবে আপনি কেবল আপনার ঠাট্টাটি পরিবর্তন করুন।

একটি বিশেষ পরীক্ষা রানার কোন প্রয়োজন নেই। আপনি শুধুমাত্র পরীক্ষার একটি অ্যারে তৈরি করতে এবং run_tests ফাংশনে এটি পাস করার প্রয়োজন। এখানে আরও কিছু ম্যানুয়াল কাজ কিন্তু আমি অবশ্যই একটি স্বনির্ধারিত স্বায়ত্তশাসিত কাঠামোর ধারণা পছন্দ করি।

প্লাস এটা আমি জানি না কিছু নিফটি সি কৌশল রয়েছে।

সামগ্রিক Cmockery শুরু করতে mocks একটি বিট আরো বোঝার প্রয়োজন। উদাহরণ আপনি এই পরাস্ত সাহায্য করা উচিত। এটা সহজ যান্ত্রিক সঙ্গে কাজ করতে পারেন মত ​​মনে হচ্ছে।


আমি একটি ফ্রেমওয়ার্ক ব্যবহার করি না, আমি শুধুমাত্র autotools "টার্গেট" টার্গেট সমর্থন ব্যবহার করুন। একটি "প্রধান" বাস্তবায়ন এবং জোরালো ব্যবহার (গুলি)।

আমার পরীক্ষা dir Makefile.am (গুলি) এর মত চেহারা:

check_PROGRAMS = test_oe_amqp

test_oe_amqp_SOURCES = test_oe_amqp.c
test_oe_amqp_LDADD = -L$(top_builddir)/components/common -loecommon
test_oe_amqp_CFLAGS = -I$(top_srcdir)/components/common -static

TESTS = test_oe_amqp

Cmockery একটি সম্প্রতি প্রবর্তিত প্রকল্প যা ইউনিট পরীক্ষা লেখার জন্য সি লাইব্রেরি ব্যবহার করা খুবই সহজ।


আমি অবাক হচ্ছি যে কার্টারের কোনও উল্লেখ নেই (http://cutter.sourceforge.net/) আপনি সি এবং সি ++ পরীক্ষা করতে পারেন, এটি নির্বিশেষে autotools সাথে সংহত করে এবং এটি সত্যিই চমৎকার টিউটোরিয়াল উপলব্ধ।


আমার সুস্পষ্ট পক্ষপাত ছাড়া অন্য

http://code.google.com/p/seatest/

ইউনিট পরীক্ষা সি কোড একটি চমৎকার সহজ উপায়। অনুভূতি xUnit


cmocka নামক cmocka বস্তুর জন্য সমর্থন সহ C এর জন্য একটি মার্জিত একক টেস্টিং ফ্রেমওয়ার্ক cmocka । এটি শুধুমাত্র স্ট্যান্ডার্ড সি লাইব্রেরির প্রয়োজন, কম্পিউটিং প্ল্যাটফর্মগুলির একটি পরিসীমা (এমবেডেড সহ) এবং বিভিন্ন কম্পাইলারগুলির সাথে কাজ করে।

এটি সাবুনিট, টেস্ট এ্যাথিং প্রোটোকল এবং জিনাইট এক্সএমএল প্রতিবেদনগুলির মত বিভিন্ন বার্তা আউটপুট ফরম্যাটের জন্যও সমর্থন করেছে।

এমএমডেড প্ল্যাটফর্মগুলিতে কাজ করার জন্য সিমোকা তৈরি করা হয়েছে এবং উইন্ডোজ সমর্থন রয়েছে।

একটি সহজ পরীক্ষা এই মত দেখাচ্ছে:

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
    (void) state; /* unused */
}

int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(null_test_success),
    };
    return cmocka_run_group_tests(tests, NULL, NULL);
}

API সম্পূর্ণরূপে দস্তাবেজযুক্ত এবং কয়েকটি উদাহরণ উৎস কোডের অংশ।

Cmocka এর সাথে শুরু করার জন্য আপনি LWN.net এ নিবন্ধটি পড়তে হবে: সিতে ঠকানো বস্তুর সাথে ইউনিট পরীক্ষা

ফেব্রুয়ারী 2015 মুক্তি পেয়েছে সিমোকা 1.0।


আমি বর্তমানে CUTest ইউনিট পরীক্ষা ফ্রেমওয়ার্ক ব্যবহার করছি:

http://cutest.sourceforge.net/

এটা খুব হালকা এবং সহজ হিসাবে এমবেডেড সিস্টেমের জন্য আদর্শ। আমি টার্গেট প্ল্যাটফর্ম পাশাপাশি ডেস্কটপে কাজ করার জন্য এটি কোন সমস্যা ছিল। ইউনিট পরীক্ষা লেখার পাশাপাশি, যা প্রয়োজন তা হল:

  • যেখানে আপনি CuTest রুটিন কল করছেন যেখানে একটি হেডার ফাইল অন্তর্ভুক্ত
  • একটি অতিরিক্ত অতিরিক্ত 'সি' ফাইল কম্পাইল / ইমেজ লিঙ্ক করা হবে
  • ইউনিট পরীক্ষাগুলি সেট আপ করতে এবং কল করতে প্রধান কিছু যোগ করা হয়েছে - আমি এটি একটি বিশেষ প্রধান () ফাংশনে আছে যা ইউনিটটিস্ট নির্মাণের সময় সংজ্ঞায়িত করা হলে সংকলিত হয়।

সিস্টেমটিকে একটি হিপ এবং কিছু স্টডিও কার্যকারিতা (যা সমস্ত এমবেডেড সিস্টেমে নেই) সমর্থন করতে হবে। তবে আপনার প্ল্যাটফর্মটি যদি না থাকে তবে কোডটি সহজেই সেই প্রয়োজনীয়তার বিকল্পগুলিতে কাজ করতে পারে এমন যথেষ্ট সহজ।

এক্সটার্নাল "সি" {} ব্লকগুলির কিছু বুদ্ধিমান ব্যবহার করে এটি সি ++ পরীক্ষাটি সমর্থন করে।


সহজে ব্যবহারযোগ্যতা এবং পোর্টেবিলিটির জন্য আমরা CHEAT ( CHEAT হোস্ট) লিখেছি।

এটি কোন নির্ভরতা আছে এবং কোন ইনস্টলেশন বা কনফিগারেশন প্রয়োজন। শুধুমাত্র একটি হেডার ফাইল এবং একটি পরীক্ষা ক্ষেত্রে প্রয়োজন বোধ করা হয়।

#include <cheat.h>

CHEAT_TEST(mathematics_still_work,
    cheat_assert(2 + 2 == 4);
    cheat_assert_not(2 + 2 == 5);
)

টেস্টগুলি চলমান এক্সিকিউটেবলের মধ্যে কম্পাইল করে যা পরীক্ষাগুলি চালানোর এবং তাদের ফলাফলগুলি রিপোর্ট করার জন্য যত্ন নেয়।

$ gcc -I . tests.c
$ ./a.out
..
---
2 successful of 2 run
SUCCESS

এটা খুব সুন্দর রং আছে।


CppUTest - ইউনিট টেস্টিং সি কোড জন্য অত্যন্ত সুপারিশ ফ্রেমওয়ার্ক।

এই থ্রেডে উল্লেখিত বইটির উদাহরণ এমবেডেড সি এর জন্য টিডিডি CppUTest ব্যবহার করে লেখা হয়।


সি এক ইউনিট টেস্টিং কাঠামো Check ; সি মধ্যে ইউনিট টেস্টিং কাঠামো একটি তালিকা here পাওয়া here এবং নিচে পুনরুত্পাদন করা যাবে। আপনার রানটাইম কত স্ট্যান্ডার্ড লাইব্রেরী কাজ করে তার উপর নির্ভর করে, আপনি তাদের মধ্যে একজনকে ব্যবহার করতে পারবেন না।

AceUnit

AceUnit (উন্নত সি এবং এমবেডেড ইউনিট) একটি আরামদায়ক সি কোড ইউনিট পরীক্ষা ফ্রেমওয়ার্ক হিসাবে নিজেই বিল। এটি JUnit 4.x অনুকরণ করা এবং প্রতিচ্ছবি মত ক্ষমতা অন্তর্ভুক্ত করার চেষ্টা করে। AceUnit সংস্থার সীমাবদ্ধতা পরিবেশগুলিতে ব্যবহার করা যেতে পারে, যেমন এমবেডেড সফ্টওয়্যার ডেভেলপমেন্ট এবং গুরুত্বপূর্ণভাবে এটি এমন পরিবেশগুলিতে সূক্ষ্ম সঞ্চালিত হয় যেখানে আপনি একক মানক হেডার ফাইল অন্তর্ভুক্ত করতে পারবেন না এবং ANSI / ISO সি লাইব্রেরিগুলির থেকে একটি একক স্ট্যান্ডার্ড সি ফাংশন আহরণ করতে পারবেন না। এটি একটি উইন্ডোজ পোর্ট আছে। এটি সংকেত ফাঁদে ফেলার জন্য ফর্ক ব্যবহার করে না, যদিও লেখক এমন বৈশিষ্ট্য যুক্ত করতে আগ্রহ প্রকাশ করেছেন। AceUnit হোমপেজ দেখুন

জিএনইউ অটোনাইট

চেক হিসাবে একই লাইন বরাবর, একটি পৃথক ঠিকানা স্পেস ইউনিট পরীক্ষা চালানোর জন্য সহচরী সহ (প্রকৃতপক্ষে, চেক মূল লেখক GNU Autounit থেকে ধারণা ধার)। GNU Autounit ব্যাপকভাবে GLib ব্যবহার করে, যার অর্থ লিঙ্কিং এবং এর জন্য বিশেষ বিকল্পগুলি প্রয়োজন, তবে এটি আপনার জন্য বড় সমস্যা হতে পারে না, বিশেষত যদি আপনি ইতিমধ্যে GTK বা GLib ব্যবহার করছেন। GNU Autounit হোমপেজে দেখুন

cUnit

এছাড়াও GLib ব্যবহার করে, কিন্তু ইউনিট পরীক্ষা ঠিকানা স্পেস রক্ষা করার জন্য ফর্ক হয় না।

CUnit

Win32 GUI বাস্তবায়নের জন্য পরিকল্পনাগুলির সাথে স্ট্যান্ডার্ড সি। বর্তমানে ফর্ক বা অন্যথায় ইউনিট পরীক্ষার ঠিকানা স্থান রক্ষা না। প্রাথমিক উন্নয়ন। CUnit হোমপেজে দেখুন

আকর্ষক

শুধু একটি .c এবং এক .h ফাইলের সাথে একটি সাধারণ ফ্রেমওয়ার্ক যা আপনি আপনার উত্স গাছের মধ্যে ছেড়ে দিন। CuTest হোমপেজে দেখুন

CppUnit

সি ++ জন্য প্রিমিয়াম ইউনিট টেস্টিং কাঠামো; আপনি সি কোড পরীক্ষা করতে এটি ব্যবহার করতে পারেন। এটি স্থিতিশীল, সক্রিয়ভাবে উন্নত, এবং একটি GUI ইন্টারফেস আছে। C এর জন্য CppUnit ব্যবহার না করার প্রাথমিক কারণগুলি প্রথমত এটি বড়, এবং দ্বিতীয়টি আপনাকে C ++ এ আপনার পরীক্ষাগুলি লিখতে হবে, যার অর্থ আপনি একটি C ++ কম্পাইলারের প্রয়োজন। যদি এটি উদ্বেগ মত শব্দ না, এটি অন্য C ++ ইউনিট পরীক্ষার ফ্রেমওয়ার্ক সহ, অবশ্যই বিবেচনার যোগ্য। CppUnit হোমপেজ দেখুন

embUnit

embunit (এমবেডেড ইউনিট) এমবেডেড সিস্টেমের জন্য অন্য ইউনিট পরীক্ষা কাঠামো। এই এক AceUnit দ্বারা supersed বলে মনে হচ্ছে। এমবেডেড ইউনিট হোমপেজে

MinUnit

ম্যাক্রো একটি সংক্ষিপ্ত সেট এবং যে এটা! বিন্দু আপনার কোড পরীক্ষা ইউনিট কত সহজ প্রদর্শন করা হয়। MinUnit হোমপেজে দেখুন

জনাব আন্ডো জন্য CUnit

একটি CUnit বাস্তবায়ন যে মোটামুটি নতুন, এবং দৃশ্যত এখনও প্রাথমিক উন্নয়ন। Mr. Ando হোমপেজের জন্য CUnit দেখুন।

এই তালিকার সর্বশেষ আপডেট মার্চ 2008।

আরো কাঠামো:

CMocka

CMocka মক বস্তুর জন্য সমর্থন সঙ্গে সি জন্য একটি পরীক্ষা কাঠামো। এটা ব্যবহার এবং সেটআপ সহজ।

cmocka.org

নির্ণায়ক

মাপদণ্ড একটি ক্রস-প্ল্যাটফর্ম সি ইউনিট টেস্টিং ফ্রেমওয়ার্ক যা স্বয়ংক্রিয় পরীক্ষা নিবন্ধীকরণ, পরামিতি পরীক্ষা, তত্ত্বগুলি সমর্থন করে এবং TAP এবং JUnit XML সহ একাধিক ফর্ম্যাটে আউটপুট করতে পারে। প্রতিটি পরীক্ষা তার নিজস্ব প্রক্রিয়া চালানো হয়, তাই প্রয়োজন হলে সংকেত এবং ক্র্যাশ রিপোর্ট করা বা পরীক্ষা করা যেতে পারে।

আরও তথ্যের জন্য মাপদণ্ড হোমপেজ দেখুন।

HWUT

এইচডব্লিউটিউ একটি সাধারণ ইউনিট টেস্ট টুল। এটি সিটির জন্য দুর্দান্ত সমর্থন সহকারে। এটি ম্যাকফিলস তৈরি করতে, কমপক্ষে 'পুনরাবৃত্তি টেবিলে' কোডেড বৃহত্তর পরীক্ষার ক্ষেত্রে তৈরি হতে পারে, রাষ্ট্র মেশিনগুলির সাথে হাঁটতে পারে, সি-স্টাব তৈরি করতে পারে এবং আরও অনেক কিছু তৈরি করতে পারে। সাধারণ পদ্ধতিটি বেশ অনন্য: Verdicts 'ভাল স্টাউড / খারাপ স্টডাউট' ভিত্তিক। তুলনা ফাংশন, যদিও, নমনীয়। সুতরাং, স্ক্রিপ্টের যেকোনো ধরনের পরীক্ষা করার জন্য ব্যবহার করা যেতে পারে। এটি যে কোনও ভাষাতে প্রযোজ্য হতে পারে যা প্রমিত আউটপুট তৈরি করতে পারে।

HWUT হোমপেজ দেখুন

CGreen

একটি আধুনিক, পোর্টেবল, ক্রস-ভাষা ইউনিট টেস্টিং এবং সি এবং সি ++ এর জন্য মকিং ফ্রেমওয়ার্ক। এটি একটি ঐচ্ছিক বিডিডি নোটেশন, একটি মকিং লাইব্রেরি, এটি একটি একক প্রক্রিয়াতে চালানোর ক্ষমতা (ডিবাগিং সহজতর করতে) প্রদান করে। স্বয়ংক্রিয়ভাবে পরীক্ষা ফাংশন আবিষ্কার করে যা একটি পরীক্ষা রানার পাওয়া যায়। কিন্তু আপনি আপনার নিজস্ব প্রোগ্রাম তৈরি করতে পারেন।

সমস্ত বৈশিষ্ট্য (এবং আরো) CGreen ম্যানুয়াল ব্যাখ্যা করা হয়।

উইকিপিডিয়া ইউনিট পরীক্ষার কাঠামোর তালিকা অনুসারে সি ইউনিট পরীক্ষার কাঠামোর বিস্তারিত তালিকা দেয় : সি


যদি আপনি জুনাইটের সাথে পরিচিত হন তবে আমি CppUnit এর পরামর্শ দিই। http://cppunit.sourceforge.net/cppunit-wiki

যে আপনি সি ++ কম্পাইলার ইউনিট পরীক্ষা করতে অনুমান করা হয়। যদি না হয় তবে অ্যাডাম রোসফিল্ডের সাথে একমত হতে হবে যে চেকটি আপনি চান।



ব্যবহার করার জন্য একটি কৌশল হল সি ++ এক্স ইউনাইট ফ্রেমওয়ার্ক (এবং সি ++ কম্পাইলার) সহ ইউনিট পরীক্ষা কোড বিকাশ করা, যখন সি মডিউল হিসাবে লক্ষ্য সিস্টেমের জন্য উৎস বজায় রাখা।

আপনার ক্রস কম্পাইলারের অধীনে স্বয়ংক্রিয়ভাবে আপনার সি উৎসটি কম্পাইল করুন, যদি সম্ভব হয় তবে আপনার ইউনিট পরীক্ষাগুলি স্বয়ংক্রিয়ভাবে।


এছাড়াও আপনি libtap , একটি সি পরীক্ষার ফ্রেমওয়ার্ক দেখতে পারেন যা টেস্ট libtap প্রোটোকল (TAP) আউটপুট করে এবং এই প্রযুক্তির জন্য বিভিন্ন ধরণের সরঞ্জামগুলির সাথে ভালভাবে সংহত করে। এটি বেশিরভাগই গতিশীল ভাষা বিশ্বের ব্যবহার করা হয়, তবে এটি ব্যবহার করা খুব সহজ হয়ে ওঠে।

একটি উদাহরণ:

#include <tap.h>

int main () {
    plan(5);

    ok(3 == 3);
    is("fnord", "eek", "two different strings not that way?");
    ok(3 <= 8732, "%d <= %d", 3, 8732);
    like("fnord", "f(yes|no)r*[a-f]$");
    cmp_ok(3, ">=", 10);

    done_testing();
}

গুগল চমৎকার পরীক্ষার কাঠামো আছে। https://github.com/google/googletest/blob/master/googletest/docs/primer.md

এবং হ্যাঁ, যতদূর আমি দেখি এটি সমতল সি দিয়ে কাজ করবে, অর্থাৎ C ++ বৈশিষ্ট্যগুলির প্রয়োজন হবে না (C ++ কম্পাইলারের প্রয়োজন হতে পারে)।


Minunit একটি অবিশ্বাস্যভাবে সহজ ইউনিট পরীক্ষার কাঠামো। আমি avr জন্য ইউনিট পরীক্ষা সি মাইক্রোকন্ট্রোলার কোড এটি ব্যবহার করছি।


মাইকেল ফেদারের বই "ওয়ার্কিং ইফেক্টিভলি উইথ লিগ্যাসি কোড" সি বিকাশের সময় ইউনিট পরীক্ষার নির্দিষ্ট কৌশলগুলি সরবরাহ করে।

নির্ভরযোগ্যতা ইনজেকশন সম্পর্কিত কৌশলগুলি রয়েছে যা সি-তে নির্দিষ্ট যা আমি অন্য কোথাও দেখিনি।



যদি আপনি এখনও পরীক্ষা কাঠামোর খোঁজে থাকেন তবে CUnitWin32 Win32 / NT প্ল্যাটফর্মের জন্য একটি।

এটি এমন একটি মৌলিক সমস্যা সমাধান করে যা আমি অন্য পরীক্ষার কাঠামোর মুখোমুখি। যেমন বিশ্বব্যাপী / স্ট্যাটিক ভেরিয়েবলগুলি একটি নির্ধারক অবস্থানে থাকে কারণ প্রতিটি পরীক্ষা পৃথক প্রক্রিয়া হিসাবে কার্যকর হয়।


লিবিউ ( http://koanlogic.com/libu ) একটি ইউনিট পরীক্ষা মডিউল রয়েছে যা স্পষ্ট পরীক্ষার স্যুট / কেস নির্ভরতা, পরীক্ষা বিচ্ছিন্নতা, সমান্তরাল কার্যকরকরণ এবং একটি কাস্টমাইজযোগ্য প্রতিবেদন ফর্ম্যাটের (ডিফল্ট ফর্ম্যাটগুলি xml এবং txt) অনুমতি দেয়।

লাইব্রেরিটি বিএসডি লাইসেন্সযুক্ত এবং এতে অন্যান্য অনেক দরকারী মডিউল রয়েছে - নেটওয়ার্কিং, ডিবাগিং, সাধারণভাবে ব্যবহৃত তথ্য কাঠামো, কনফিগারেশন, ইত্যাদি - আপনার প্রকল্পগুলিতে তাদের প্রয়োজন হবে ...


ব্যক্তিগতভাবে আমি গুগল টেস্ট ফ্রেমওয়ার্ক পছন্দ করি।

সি কোড পরীক্ষার বাস্তব অসুবিধা বহিরাগত মডিউলগুলির উপর নির্ভরশীলতা ভাঙা যাতে আপনি ইউনিটগুলিতে কোড বিচ্ছিন্ন করতে পারেন। আপনি উত্তরাধিকার কোড প্রায় পরীক্ষা পেতে চেষ্টা করছেন যখন এই বিশেষ করে সমস্যাযুক্ত হতে পারে। এই ক্ষেত্রে আমি প্রায়ই পরীক্ষায় stubs ফাংশন ব্যবহার লিঙ্ককারী ব্যবহার করে নিজেকে খুঁজে।

তারা " seams " সম্পর্কে কথা বলার সময় মানুষ কি উল্লেখ করা হয়। সি-তে আপনার একমাত্র বিকল্পটি হল আপনার নির্ভরতাগুলি ঠকানোর জন্য প্রাক প্রসেসর বা লিঙ্কারটি ব্যবহার করা।

আমার সি প্রোজেক্টগুলির মধ্যে একটি সাধারণ পরীক্ষা স্যুট এটি দেখতে পারে:

#include "myimplementationfile.c"
#include <gtest/gtest.h>

// Mock out external dependency on mylogger.o
void Logger_log(...){}

TEST(FactorialTest, Zero) {
    EXPECT_EQ(1, Factorial(0));
}

মনে রাখবেন যে আপনি আসলে সি ফাইলটি সহ এবং শিরোনাম ফাইল সহ নয় । এটি সমস্ত স্ট্যাটিক ডেটা সদস্যদের অ্যাক্সেস সুবিধা দেয়। এখানে আমি আমার লগার (যা logger.o হতে পারে এবং m খালি বাস্তবায়ন দিতে পারে।) এর অর্থ হ'ল এটি পরীক্ষা করে যে কোডটি বাকি কোড বেস থেকে আলাদাভাবে সংকলন করে এবং লিঙ্ক করে এবং বিচ্ছিন্নতায় সঞ্চালিত হয়।

কোডটি ক্রস-কম্পাইল করার জন্য, এটি কাজ করার জন্য আপনাকে লক্ষ্যের জন্য ভাল সুবিধাগুলি প্রয়োজন। আমি এটি একটি PowerPC আর্কিটেকচারে লিনাক্সে সংকলিত googletest ক্রস দিয়ে করেছি। এটি আপনার জ্ঞান সংগ্রহ করার জন্য একটি পূর্ণ শেল এবং os আছে কারণ জ্ঞান করে তোলে। কম সমৃদ্ধ পরিবেশের জন্য (যা আমি একটি সম্পূর্ণ OS ছাড়া কিছু হিসাবে শ্রেণীবদ্ধ) আপনি শুধু হোস্ট তৈরি এবং চালানো উচিত। আপনি যে কোনভাবে এটি করা উচিত তাই আপনি বিল্ড অংশ হিসাবে স্বয়ংক্রিয়ভাবে পরীক্ষা চালাতে পারেন।

আমি সাধারন সি ++ কোডটি সাধারনত অনেক সহজ কারণ এটির কোডটি সাধারনত পদ্ধতির তুলনায় অনেক কম মিলিত হয় (অবশ্যই এটি কোডিং স্টাইলের উপর নির্ভর করে)। এছাড়াও সি ++ এ আপনি নির্ভরশীলতা ইনজেকশন এবং পদ্ধতিগুলিকে এমনভাবে ব্যবহার করতে পারেন যাতে কোডটি অন্যথায় এনক্যাপুলেটেড হয়।

মাইকেল Feathers লিগ্যাসি কোড পরীক্ষা সম্পর্কে একটি চমৎকার বই আছে । এক অধ্যায়ে তিনি অ-ওও কোডের সাথে ডিল করার কৌশলগুলি জুড়ে দেন যা আমি অত্যন্ত সুপারিশ করি।

সম্পাদনা : আমি ইউনিট টেস্টিং পদ্ধতির কোড সম্পর্কে একটি ব্লগ পোস্ট লিখেছি, উৎস সহ GitHub এ উপলব্ধ

সম্পাদনা : প্রাগমেটিক প্রোগ্রামারদের কাছ থেকে আসছে এমন একটি নতুন বই রয়েছে যা বিশেষভাবে ইউনিট পরীক্ষার সি কোডকে উল্লেখ করে যা আমি অত্যন্ত সুপারিশ করি





embedded