c - সকল - ইউনিট টেস্টিং সি কোড
এইচটিএমএল এর সকল ট্যাগ (20)
আমি এই গ্রীষ্মে সোজা সিটিতে লিখিত একটি এমবেডেড সিস্টেমে কাজ করেছি। এটি একটি বিদ্যমান প্রকল্প যা আমি যে কোম্পানির জন্য কাজ করেছি তা গ্রহণ করা হয়েছে। আমি জুনাইট ব্যবহার করে জাভাতে একক পরীক্ষা লেখার অভ্যাসে অভ্যস্ত হয়েছি কিন্তু বিদ্যমান কোডের জন্য ইউনিট পরীক্ষাগুলি লেখার সর্বোত্তম পদ্ধতি হিসাবে ক্ষতিগ্রস্ত হয়েছিল এবং সেইসাথে নতুন কোডটি যোগ করা হয়েছিল।
একক টেস্টিং প্লেইন সি কোড তৈরি করার কোন উপায় আছে যা ইউনিট পরীক্ষার জাভা কোড হিসাবে সহজ, উদাহরণস্বরূপ, জুনাইট ? কোন অন্তর্দৃষ্টি যা বিশেষভাবে এমবেডেড ডেভেলপমেন্ট (আর্ম-লিনাক্স প্ল্যাটফর্মের ক্রস-কম্পাইলিং) প্রয়োগ করবে তা ব্যাপকভাবে প্রশংসা করা হবে।
আমার সুস্পষ্ট পক্ষপাত ছাড়া অন্য
http://code.google.com/p/seatest/
ইউনিট পরীক্ষা সি কোড একটি চমৎকার সহজ উপায়। অনুভূতি xUnit
আমি CxxTest একটি এমবেডেড সি / সি ++ পরিবেশের জন্য (প্রাথমিকভাবে C ++) ব্যবহার করি।
আমি CxxTest পছন্দ করি কারণ এটি পরীক্ষার রানার তৈরি করতে একটি পার্ল / পাইথন স্ক্রিপ্ট রয়েছে। এটি সেটআপ করার জন্য একটি ছোট ঢালের পরে (পরীক্ষার রানারটি লেখার পরে আপনাকে এখনও ছোট), এটি ব্যবহার করা খুব সহজ (নমুনা এবং দরকারী ডকুমেন্টেশন অন্তর্ভুক্ত)। সর্বাধিক কাজ 'হার্ডওয়্যার' কোড অ্যাক্সেস সেট আপ ছিল তাই আমি ইউনিট / মডিউল পরীক্ষা কার্যকরভাবে করতে পারে। তারপরে নতুন ইউনিট পরীক্ষা ক্ষেত্রে যুক্ত করা সহজ।
আগে উল্লেখ করা হয়েছে এটি একটি সি / সি ++ ইউনিট পরীক্ষা ফ্রেমওয়ার্ক। সুতরাং আপনি একটি সি ++ কম্পাইলার প্রয়োজন হবে।
আমি একটি ফ্রেমওয়ার্ক ব্যবহার করি না, আমি শুধুমাত্র 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
আমি বর্তমানে CUTest ইউনিট পরীক্ষা ফ্রেমওয়ার্ক ব্যবহার করছি:
http://cutest.sourceforge.net/
এটা খুব হালকা এবং সহজ হিসাবে এমবেডেড সিস্টেমের জন্য আদর্শ। আমি টার্গেট প্ল্যাটফর্ম পাশাপাশি ডেস্কটপে কাজ করার জন্য এটি কোন সমস্যা ছিল। ইউনিট পরীক্ষা লেখার পাশাপাশি, যা প্রয়োজন তা হল:
- যেখানে আপনি CuTest রুটিন কল করছেন যেখানে একটি হেডার ফাইল অন্তর্ভুক্ত
- একটি অতিরিক্ত অতিরিক্ত 'সি' ফাইল কম্পাইল / ইমেজ লিঙ্ক করা হবে
- ইউনিট পরীক্ষাগুলি সেট আপ করতে এবং কল করতে প্রধান কিছু যোগ করা হয়েছে - আমি এটি একটি বিশেষ প্রধান () ফাংশনে আছে যা ইউনিটটিস্ট নির্মাণের সময় সংজ্ঞায়িত করা হলে সংকলিত হয়।
সিস্টেমটিকে একটি হিপ এবং কিছু স্টডিও কার্যকারিতা (যা সমস্ত এমবেডেড সিস্টেমে নেই) সমর্থন করতে হবে। তবে আপনার প্ল্যাটফর্মটি যদি না থাকে তবে কোডটি সহজেই সেই প্রয়োজনীয়তার বিকল্পগুলিতে কাজ করতে পারে এমন যথেষ্ট সহজ।
এক্সটার্নাল "সি" {} ব্লকগুলির কিছু বুদ্ধিমান ব্যবহার করে এটি সি ++ পরীক্ষাটি সমর্থন করে।
আমি লক্ষ্য পরীক্ষা করার আগে পিসি এ এমবেডেড কোড জন্য কিছু ইউনিট পরীক্ষার করতে RCUNIT ব্যবহার। ভাল হার্ডওয়্যার ইন্টারফেস বিমূর্ততা গুরুত্বপূর্ণ অন্য endianness এবং মেমরি ম্যাপ নিবন্ধক আপনি হত্যা করতে যাচ্ছি।
এছাড়াও আপনি 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 ++ কম্পাইলারের প্রয়োজন হতে পারে)।
ব্যক্তিগতভাবে আমি গুগল টেস্ট ফ্রেমওয়ার্ক পছন্দ করি।
সি কোড পরীক্ষার বাস্তব অসুবিধা বহিরাগত মডিউলগুলির উপর নির্ভরশীলতা ভাঙা যাতে আপনি ইউনিটগুলিতে কোড বিচ্ছিন্ন করতে পারেন। আপনি উত্তরাধিকার কোড প্রায় পরীক্ষা পেতে চেষ্টা করছেন যখন এই বিশেষ করে সমস্যাযুক্ত হতে পারে। এই ক্ষেত্রে আমি প্রায়ই পরীক্ষায় 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 এ উপলব্ধ ।
সম্পাদনা : প্রাগমেটিক প্রোগ্রামারদের কাছ থেকে আসছে এমন একটি নতুন বই রয়েছে যা বিশেষভাবে ইউনিট পরীক্ষার সি কোডকে উল্লেখ করে যা আমি অত্যন্ত সুপারিশ করি ।
ব্যবহার করার জন্য একটি কৌশল হল সি ++ এক্স ইউনাইট ফ্রেমওয়ার্ক (এবং সি ++ কম্পাইলার) সহ ইউনিট পরীক্ষা কোড বিকাশ করা, যখন সি মডিউল হিসাবে লক্ষ্য সিস্টেমের জন্য উৎস বজায় রাখা।
আপনার ক্রস কম্পাইলারের অধীনে স্বয়ংক্রিয়ভাবে আপনার সি উৎসটি কম্পাইল করুন, যদি সম্ভব হয় তবে আপনার ইউনিট পরীক্ষাগুলি স্বয়ংক্রিয়ভাবে।
মিনিুনিট পড়ার পর আমি মনে করি ম্যাক্রোকে দৃঢ়ভাবে পরীক্ষা করার জন্য একটি ভাল উপায় ছিল যা আমি অনেকটা রক্ষামূলক প্রোগ্রাম কৌশল ব্যবহার করেছিলাম। তাই আমি মিনুনিটের একই ধারণাটি মানসিক চাপ দিয়ে মিশ্রিত করেছি। আপনি k0ga এর ব্লগে আমার কাঠামো (একটি ভাল নাম NoMinunit হতে পারে) দেখতে পারেন
যদি আপনি Win32 প্ল্যাটফর্ম বা এনটি কার্নেল মোড লক্ষ্য করে থাকেন তবে আপনার উচিত cfix ।
যদি আপনি জুনাইটের সাথে পরিচিত হন তবে আমি CppUnit এর পরামর্শ দিই। http://cppunit.sourceforge.net/cppunit-wiki
যে আপনি সি ++ কম্পাইলার ইউনিট পরীক্ষা করতে অনুমান করা হয়। যদি না হয় তবে অ্যাডাম রোসফিল্ডের সাথে একমত হতে হবে যে চেকটি আপনি চান।
লকেট চেষ্টা করুন! - http://code.google.com/p/lcut
সহজে ব্যবহারযোগ্যতা এবং পোর্টেবিলিটির জন্য আমরা 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
এটা খুব সুন্দর রং আছে।
সি এক ইউনিট টেস্টিং কাঠামো 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 মক বস্তুর জন্য সমর্থন সঙ্গে সি জন্য একটি পরীক্ষা কাঠামো। এটা ব্যবহার এবং সেটআপ সহজ।
নির্ণায়ক
মাপদণ্ড একটি ক্রস-প্ল্যাটফর্ম সি ইউনিট টেস্টিং ফ্রেমওয়ার্ক যা স্বয়ংক্রিয় পরীক্ষা নিবন্ধীকরণ, পরামিতি পরীক্ষা, তত্ত্বগুলি সমর্থন করে এবং TAP এবং JUnit XML সহ একাধিক ফর্ম্যাটে আউটপুট করতে পারে। প্রতিটি পরীক্ষা তার নিজস্ব প্রক্রিয়া চালানো হয়, তাই প্রয়োজন হলে সংকেত এবং ক্র্যাশ রিপোর্ট করা বা পরীক্ষা করা যেতে পারে।
আরও তথ্যের জন্য মাপদণ্ড হোমপেজ দেখুন।
HWUT
এইচডব্লিউটিউ একটি সাধারণ ইউনিট টেস্ট টুল। এটি সিটির জন্য দুর্দান্ত সমর্থন সহকারে। এটি ম্যাকফিলস তৈরি করতে, কমপক্ষে 'পুনরাবৃত্তি টেবিলে' কোডেড বৃহত্তর পরীক্ষার ক্ষেত্রে তৈরি হতে পারে, রাষ্ট্র মেশিনগুলির সাথে হাঁটতে পারে, সি-স্টাব তৈরি করতে পারে এবং আরও অনেক কিছু তৈরি করতে পারে। সাধারণ পদ্ধতিটি বেশ অনন্য: Verdicts 'ভাল স্টাউড / খারাপ স্টডাউট' ভিত্তিক। তুলনা ফাংশন, যদিও, নমনীয়। সুতরাং, স্ক্রিপ্টের যেকোনো ধরনের পরীক্ষা করার জন্য ব্যবহার করা যেতে পারে। এটি যে কোনও ভাষাতে প্রযোজ্য হতে পারে যা প্রমিত আউটপুট তৈরি করতে পারে।
CGreen
একটি আধুনিক, পোর্টেবল, ক্রস-ভাষা ইউনিট টেস্টিং এবং সি এবং সি ++ এর জন্য মকিং ফ্রেমওয়ার্ক। এটি একটি ঐচ্ছিক বিডিডি নোটেশন, একটি মকিং লাইব্রেরি, এটি একটি একক প্রক্রিয়াতে চালানোর ক্ষমতা (ডিবাগিং সহজতর করতে) প্রদান করে। স্বয়ংক্রিয়ভাবে পরীক্ষা ফাংশন আবিষ্কার করে যা একটি পরীক্ষা রানার পাওয়া যায়। কিন্তু আপনি আপনার নিজস্ব প্রোগ্রাম তৈরি করতে পারেন।
সমস্ত বৈশিষ্ট্য (এবং আরো) CGreen ম্যানুয়াল ব্যাখ্যা করা হয়।
উইকিপিডিয়া ইউনিট পরীক্ষার কাঠামোর তালিকা অনুসারে সি ইউনিট পরীক্ষার কাঠামোর বিস্তারিত তালিকা দেয় : সি
http://code.google.com/p/cmockery/ এ cmockery
এবং এমবেডেড ইউনিট এমবেডেড সি সিস্টেমের জন্য ইউনিট টেস্টিং ফ্রেমওয়ার্ক। এর নকশা জুনাইট এবং সিএননিট থেকে আরও অনুলিপি করা হয়েছিল এবং তারপরে এম্বেডেড সি সিস্টেমের জন্য কিছুটা অভিযোজিত হয়েছিল। এমবেডেড ইউনিট std সি libs প্রয়োজন হয় না। সমস্ত বস্তু গঠন এলাকা বরাদ্দ করা হয়।
এবং Tessy এমবেডেড সফটওয়্যার ইউনিট টেস্টিং স্বয়ংক্রিয়।
CppUTest - ইউনিট টেস্টিং সি কোড জন্য অত্যন্ত সুপারিশ ফ্রেমওয়ার্ক।
এই থ্রেডে উল্লেখিত বইটির উদাহরণ এমবেডেড সি এর জন্য টিডিডি CppUTest ব্যবহার করে লেখা হয়।
Minunit একটি অবিশ্বাস্যভাবে সহজ ইউনিট পরীক্ষার কাঠামো। আমি avr জন্য ইউনিট পরীক্ষা সি মাইক্রোকন্ট্রোলার কোড এটি ব্যবহার করছি।