কেউ কি ভিজ্যুয়াল-সি ++ দিয়ে "রিয়েল" টিডিডি করছে, এবং যদি হ্যাঁ, তবে তারা কীভাবে তা করবে? [বন্ধ]


10

পরীক্ষা চালিত বিকাশ বোঝায় কোডের আগে পরীক্ষা লিখতে এবং একটি নির্দিষ্ট চক্র অনুসরণ করে :

  • পরীক্ষা লিখুন
  • পরীক্ষা পরীক্ষা (রান)
  • প্রোডাকশন কোড লিখুন
  • পরীক্ষা পরীক্ষা (রান)
  • উত্পাদনের কোড সাফ করুন
  • পরীক্ষা পরীক্ষা (চালানো)

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

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

"বিয়ারেবল" এর অর্থ হ'ল ম্যানুয়ালি আলাদা টেস্টিং প্রজেক্ট স্থাপন না করেই নির্দিষ্ট সিপিপি ফাইলের জন্য পরীক্ষা চালানো এক-ক্লিকের ক্রিয়া Bea "বিয়ারেবল" এর অর্থ একটি সাধারণ পরীক্ষা শুরু হয় (লিঙ্কিং!) এবং খুব দ্রুত চলে ।

সুতরাং, ভিজ্যুয়াল স্টুডিওর সাথে দেশীয় সি ++ বিকাশের জন্য টিডিডি চক্রকে কী সরঞ্জামগুলি (প্লাগিন) এবং কৌশলগুলি বাইরে রয়েছে?

দ্রষ্টব্য: ফ্রি বা "বাণিজ্যিক" সরঞ্জাম দিয়ে আমি ভাল আছি।

দয়া করে : কোনও কাঠামোর সুপারিশ নেই। (যদি না ফ্রেমওয়ার্কটিতে ডেডিকেটেড ভিজ্যুয়াল স্টুডিও প্লাগইন থাকে এবং আপনি প্লাগইনটি সুপারিশ করতে চান না))


সম্পাদনা দ্রষ্টব্য : এখন পর্যন্ত উত্তরগুলি কীভাবে ইউনিট পরীক্ষার কাঠামোকে ভিজ্যুয়াল স্টুডিওতে সংহত করতে পারে তার লিঙ্ক সরবরাহ করেছে। আপনার প্রথম পরীক্ষাগুলি কীভাবে সংকলন করতে এবং ইউটি কাঠামোটি সংকলন করতে এবং কীভাবে পেতে হয় তার সংস্থান কম-বেশি বর্ণনা করে। এই প্রশ্নটি সম্পর্কে এটি নয়আমি মতামত করছি যে সত্যই উত্পাদনশীলভাবে কাজ করার জন্য, ম্যানুয়ালি রক্ষণাবেক্ষণ (!) এ ইউনিট টেস্ট করা, আপনার প্রোডাকশন ক্লাস থেকে পৃথক ভিসিপ্রিজি এত বেশি ওভারহেড যুক্ত করবে যে টিডিডি "সম্ভব নয়"। যতদূর আমি অবগত, আপনি ইউনিট টেস্ট এবং টিডিডি সক্ষম করার জন্য কোনও জাভা বা সি # জিনিসে অতিরিক্ত "প্রকল্পগুলি" যুক্ত করবেন না এবং একটি ভাল কারণে। এটা করা উচিত সি ++ সহ সঠিক সরঞ্জাম দেওয়া সম্ভব হবে তবে টিডিডি / সি ++ / ভিএস এর জন্য খুব কম সরঞ্জাম রয়েছে বলে মনে হচ্ছে (এই প্রশ্নটি সম্পর্কে)।


আশেপাশে গুগলিং করে, আমি একটি সরঞ্জাম পেয়েছি, ভিজ্যুয়ালসেটর , যা সঠিক দিকে লক্ষ্য করছে বলে মনে হচ্ছে। তবে আফিক্স, এটি ব্যাপকভাবে ব্যবহৃত হচ্ছে বলে মনে হয় না (সিপিউউনিট, বুস্ট.টেষ্ট ইত্যাদির তুলনায়)।


সম্পাদনা: আমি এই প্রশ্নের প্রসঙ্গে একটি মন্তব্য যুক্ত করতে চাই। আমি মনে করি এটি সমস্যার রূপরেখার (অংশের) একটি ভাল সংক্ষিপ্তসার করে: ( বিলি ওনেলি মন্তব্য করেছেন )

ভিজ্যুয়াল স্টুডিওটি "বিল্ড স্ক্রিপ্টগুলি" ব্যবহার করে না যা ব্যবহারকারীর দ্বারা যথাযথ সম্পাদনাযোগ্য। একটি প্রকল্প একটি বাইনারি উত্পাদন করে। তদুপরি, জাভার এমন সম্পত্তি রয়েছে যা জাভা কখনই একটি সম্পূর্ণ বাইনারি তৈরি করে না - আপনি যে বাইনারি তৈরি করেন তা বর্গ ফাইলগুলির একটি জিপ। অতএব পৃথকভাবে JAR একসাথে (যেমন 7z ব্যবহার করে) সংকলন করা সম্ভব। সি ++ এবং সি # উভয়ই তাদের বাইনারিগুলিকে লিঙ্ক করে তাই সাধারণভাবে বলতে গেলে আপনি এর মতো স্ক্রিপ্ট লিখতে পারবেন না। আপনি যে নিকটতম পেতে পারেন তা হ'ল পৃথকভাবে সমস্তগুলি সংকলন করা এবং তারপরে দুটি লিঙ্কিং করা (একটি উত্পাদনের জন্য, একটি পরীক্ষার জন্য)।


2
As far as I am aware, you do not add extra "projects" to a Java or C# thing to enable Unit Tests and TDD,<- আমি মনে করি এটি সঠিক নয়। আপনার সাধারণত সি # তেও একাধিক প্রকল্প রয়েছে; আপনি নিজের পরীক্ষার কোডটি আপনার প্রযোজনা বাইনারিতে প্রেরণ করতে চান না।
বিলি ওনিল

2
আমি ফ্রেমওয়ার্কটি দ্বারা পরিচালিত এটি কখনই দেখিনি। বাইনারি তৈরির জন্য একটি প্রকল্প প্রয়োজন। আপনি দুটি বাইনারি চান; পরীক্ষার কোড সহ একটি এবং উত্পাদন কোড সহ একটি। সুতরাং আপনার দুটি প্রকল্পের প্রয়োজন। এর আশেপাশে কোনও উপায় নেই।
বিলি ওনিল

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

2
@ রবার্ট: ভিজ্যুয়াল স্টুডিওটি "বিল্ড স্ক্রিপ্টগুলি" ব্যবহার করে না যা ব্যবহারকারীর দ্বারা যথাযথ সম্পাদনাযোগ্য। একটি প্রকল্প একটি বাইনারি উত্পাদন করে। তদুপরি, জাভার এমন সম্পত্তি রয়েছে যা জাভা কখনই একটি সম্পূর্ণ বাইনারি তৈরি করে না - আপনি যে বাইনারি তৈরি করেন তা বর্গ ফাইলগুলির একটি জিপ। অতএব পৃথকভাবে জাইআর একসাথে ম্যানুয়ালি (যেমন ব্যবহার করে 7z) সংকলন করা সম্ভব । সি ++ এবং সি # উভয়ই তাদের বাইনারিগুলিকে লিঙ্ক করে তাই সাধারণভাবে বলতে গেলে আপনি এর মতো স্ক্রিপ্ট লিখতে পারবেন না। আপনি যে নিকটতম পেতে পারেন তা হ'ল পৃথকভাবে সমস্তগুলি সংকলন করা এবং তারপরে দুটি লিঙ্কিং করা (একটি উত্পাদনের জন্য, একটি পরীক্ষার জন্য)।
বিলি ওনিল

4
সিরিয়াসলি? "টিপ: প্রতিটি পরীক্ষায় একটি প্রধান ফাংশন থাকতে হবে এবং একটি কার্যকর হতে পারে" " যেকোন যুক্তিসঙ্গত পরীক্ষার জন্য এটি হাস্যকরভাবে ধীর বলে মনে হচ্ছে। এমনকি যদি তাদের নির্বাহযোগ্য হিসাবে কেবলমাত্র একটি পরীক্ষার স্থিরতা বোঝানো হয় তবে এটি এখনও নির্বোধ পরামর্শ আইএমও। এটি কয়েক হাজার পরীক্ষার (একটি মাঝারি আকারের প্রকল্পের জন্য) বা কয়েক লক্ষ পরীক্ষার (একটি বৃহত প্রকল্পের জন্য) দিয়ে করার চেষ্টা করুন এবং আপনি অবশ্যই পাগল হয়ে যাবেন।
বৈধতা দিন

উত্তর:


4

আমি সি ++ এবং ভিজ্যুয়াল স্টুডিওতে টিডিডি করার বিষয়ে একটি পাঁচ-ভাগ ব্লগ সিরিজ লিখেছি: অংশ 1 , অংশ 2 , খণ্ড 3 , খণ্ড 4 , খণ্ড 5

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

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

আমার "এক ক্লিক অ্যাকশন" হ'ল "সমাধান তৈরি করুন"। যদি এটি অত্যধিক বিল্ডিং করা থাকে আপনি যখন কাজ করছেন তখন সর্বদা অপ্রাসঙ্গিক প্রকল্পগুলি আনলোড করতে পারেন এবং তারপরে বিল্ড সলিউশন আপনার পরিবর্তনের ফলে আপডেট হওয়ার জন্য প্রয়োজনীয় ন্যূনতম প্রকল্পগুলিকেই তৈরি করবে।

মঞ্জুর, সি ++ এর সংকলনের সময় প্রকৃতি এটি এনডি এবং সি # এর তুলনায় টিডিডি প্রক্রিয়াটির প্রতিটি চক্রের ক্ষেত্রে আরও কিছুটা সময় নেয়, তবে আমার ভাল-পরীক্ষিত সি ++ কোড থেকে আমার যে আত্মবিশ্বাস পাওয়া যায় তা মূল্যবান। অন্যথায় আমি ডিবাগারে আরও অনেক সময় ব্যয় করব। আমি gmock আপনার ব্যবহার এড়াতে সতর্কতা হিসাবে এটি সংকলন সময় পরীক্ষা করতে যথেষ্ট যোগ করতে পারে। আমি এ পর্যন্ত বেশিরভাগই হালকা ওজনের "নকল" অবজেক্ট নিয়ে দূরে সরে এসেছি এবং খুব কমই মকগুলির সম্পূর্ণ বর্ধিত কার্যকারিতা প্রয়োজন। সি ++ এর জন্য মশকরা ফ্রেমগুলি ভারীভাবে টেমপ্লেট ভিত্তিক এবং এটি সংকলনটির সময়টিকে উল্লেখযোগ্যভাবে বাড়িয়ে তুলতে পারে, তাই এগুলি আপনার সংরক্ষণের জন্য সংরক্ষণ করা উচিত যেখানে আপনার সত্যিই একটি উপহাসের প্রয়োজন এবং জাল ঠিক করবেন না।

আমি প্রোডাকশন কোডের জন্য পরীক্ষার প্রকল্প তৈরির কিছু বয়লার প্লেট প্রকৃতি স্বয়ংক্রিয় করতে একটি বুস্ট.স্টেস্ট ইউনিট পরীক্ষা প্রকল্প উইজার্ড তৈরি করার বিষয়টি বিবেচনা করেছি, তবে আপনি এটি কয়েক বার করার পরে ম্যানুয়ালি করা এত কঠিন নয়।

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

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


"... নিশ্চিত নন কেন আপনি বলেন যে আপনি সি # তে অতিরিক্ত প্রকল্প করেন না ... আমি জাভা বিশ্ব সম্পর্কে যা জানি, সেখান থেকেও এটি সাধারণ বিষয় ..." আমার পক্ষে ভুল ধারণা থাকতে পারে। (অন্তত। নেট জন্য, কারণ আপনার। নেট জন্য এক্সিকিউটেবল প্রয়োজন - জাভা জন্য আপনার কেবল ক্লাস ফাইল প্রয়োজন, তাই অতিরিক্ত প্রকল্পটি কোথায় ফিট হবে তা আমি যথেষ্ট দেখতে পাই না)
মার্টিন বা

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

1
"পরীক্ষার কোডটি উত্পাদন কোড থেকে আলাদা রাখুন, এটিই আপনার জন্য পৃথক প্রকল্পগুলি করছে" - আহা! ঠিক আছে, আইএমএইচও। পৃথক "প্রকল্প" সি ++ এবং। নেট এর প্রয়োজনীয়তা, কারণ যে কোনও কিছুই চালানোর জন্য এক্সিকিউটেবল তৈরি করা প্রয়োজন এবং একটি (এক) এক্সিকিউটেবল তৈরি করতে আপনার একটি (এক) প্রকল্পের প্রয়োজন। আমি পরীক্ষার কোডটি প্রোডাকশন কোড থেকে আলাদা (বা না) রাখার ক্ষেত্রে ভাল, তবে পরীক্ষার এক্সিকিউটেবল বিরক্তিকর উত্পাদন করার জন্য আমি একটি "রিডানডেন্ট" "প্রকল্প" যুক্ত করতে চাই। :-)
মার্টিন বা

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

2

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

আমি যা দরকারী মনে করেছি তা হল প্রকল্পটিকে কয়েকটি উপ-প্রকল্পে আলাদা করা separate

  1. একটি স্থিতিশীল বা গতিশীল লাইব্রেরিতে প্রকৃত প্রকল্প উত্স কোডের 99% থাকে।
  2. একটি প্রকল্প যা বেশিরভাগ মূল প্রোগ্রামটি চালানোর জন্য একটি মূল () পদ্ধতি নিয়ে গঠিত।
  3. আমার পরীক্ষার কাঠামো চালানোর জন্য একটি পরীক্ষামূলক প্রকল্প যা একটি প্রধান () থাকে এবং টেস্ট এবং মক অবজেক্টযুক্ত প্রচুর ফাইল।

এই সেটআপের সাথে, আমার আইডিই বিভিন্ন প্রকল্পে ফাইল যুক্ত করার যত্ন নেয় এবং যদি নির্ভরতা সঠিকভাবে নির্ধারণ করা হয় তবে আমি আংশিক পুনর্নির্মাণের সাথে আমার সমস্ত ইউনিট পরীক্ষা চালাতে পারি। এমনকি আমি তৈরি করার পরে আমার সমস্ত পরীক্ষা চালানোর জন্য বর্তমানে এটি সেটআপ করেছি। জেনকিনস, আমি বর্তমানে যে সিআই ব্যবহার করছি তা চালিয়ে যায় এবং পরীক্ষার ফলাফল এবং কভারেজ ডেটা সরবরাহ করে।

আপনি যদি টেস্ট ফিউচার টেস্টফু-এর অধীনে ফু এর জন্য ইউনিট পরীক্ষার সমস্ত নামকরণের ঘটনা ঘটেন তবে ফাইল আইফইও সিপিপি-র জন্য ইউনিট পরীক্ষা চালানোর জন্য কোনও ফাইলের জন্য আপনার আইডিইতে একটি কাস্টম লঞ্চার যুক্ত করা সম্ভব। ভিজ্যুয়াল-সি ++ এর জন্য কীভাবে এটিকে সুনির্দিষ্টভাবে সেট আপ করবেন আমি নিশ্চিত নই তবে আমি মনে করি এটি সম্ভব হয়েছে।


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

2

আমি দেশীয় সি ++ কোড পরীক্ষার জন্য এমএসটিস্ট ব্যবহার করি।
এই উপায় সম্পর্কে এখানে দুর্দান্ত ব্লগ পোস্ট: http://blogs.msdn.com/b/jsocha/archive/2010/11/19/writing-unit-tests-in-visual-studio- for-native-c। aspx

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

[-] Solution 'Foo'      Foo\Foo.sln
 |-[-] Foo              Foo\Foo\Foo.vcproj
 |  |-[-] include
 |  |  |- foo.h         Foo\Foo\foo.h
 |  |  |- bar.h         Foo\Foo\bar.h
 |  |
 |  |-[-] source
 |     |- foo.cpp       Foo\Foo\foo.cpp
 |
 |-[-] Foo.Tests        Foo\Foo.Tests\Foo.Tests.vcproj
    |                        (Additional include directory: "..\Foo")
    |-[-] include
    |  |- FakeBar.h     Foo\Foo.Tests\FakeBar.h
    |
    |-[-] source
       |-[-] app
       |  |- foo.cpp    Foo\Foo\foo.cpp    -- not in Foo.Tests\
       |
       |-[-] unit-tests
          |- foo_Tests.cpp   Foo\Foo.Tests\foo_Tests.cpp
          |- bar_Tests.cpp   Foo\Foo.Tests\bar_Tests.cpp

আমি দেখতে পেলাম যে ইউনিট পরীক্ষার জন্য সি ++ / সিএলআই স্টাফ ব্যবহার করে খাঁটি নেটিভ সি ++ কোড টেস্টিংয়ের সময় জলের জলে ঘোলা হয়। আমি তবে সি ++ / সিএলআই অ্যাপ্লিকেশন কোডটি পরীক্ষা করতে নুনিট ব্যবহার করেছি। আমি সি # তে আমার পরীক্ষা লিখেছি এবং এটি ঠিক কাজ করেছে fine (বিদ্যমান কোড বেসটি সি ++ / সিএলআই ছিল এবং আমি এটি সি # তে পোর্ট করতে চাইনি))
বৈধতা দিন

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

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

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

2

দিনের কিছুটা দেরি হতে পারে তবে আমি যদি আপনার প্রশ্নটি সঠিকভাবে পড়ে থাকি তবে আপনি টিডিডি চক্রটি উন্নত করার জন্য কৌশলগুলি সন্ধান করছেন? এটি এখানে উল্লেখ করা হয়নি, তবে আপনি কি ভিএস-তে পোস্ট-বিল্ড ইভেন্টগুলি দেখেছেন?

আমাদের সমাধানগুলি সাধারণত সংগঠিত হয় (প্রকল্পের নির্ভরতাগুলির সাথে দেখানো হয়) ...

MAIN-APP > LIB1, LIB2, UNIT-TEST-APP
UNIT-TEST-LIB1 > LIB1
UNIT-TEST-LIB2 > LIB2
UNIT-TEST-APP > UNIT-TEST-LIB1, UNIT-TEST-LIB2

মেইন-অ্যাপের পোস্ট-বিল্ড ইভেন্টটি ইউএনআইটি-টেস্ট-অ্যাপ্লিকেশন চালাবে

ইউএনআইটি-টেস্ট-অ্যাপের পোস্ট-বিল্ড ইভেন্টটি নিজেই চলবে (কেবল '$ (টার্গেটপ্যাথ') পোস্ট-বিল্ড ইভেন্টে চালানোর আদেশ হিসাবে)।

(এর অর্থ এই নয় যে মেইন-অ্যাপ্লিকেশন তৈরি করার সময়, ইউনিট পরীক্ষাগুলি দু'বার চালানো যেতে পারে, তবে আমাদের ক্ষেত্রে এটি আসলে সমস্যা হয়নি!)

যদিও উল্লেখ করা হয়েছে, হ্যাঁ, এই কাঠামোটি স্থাপনে কিছুটা প্রচেষ্টা আছে, তবে একবার এটি উপস্থিত থাকলে পরীক্ষাগুলি যুক্ত করা সহজ।

সুতরাং আপনাকে যা করতে হবে তা হ'ল মূল অ্যাপটি তৈরি করা এবং ইউনিট পরীক্ষাগুলি স্বয়ংক্রিয়ভাবে চলবে!


1

ভাল, জানেন না এটি সাহায্য করে কিনা, তবে ব্রেট এল। শ্যুচার্টের টিডিডি সম্পর্কে কয়েকটি দুর্দান্ত ভিডিও রয়েছে। দুর্ভাগ্যক্রমে, তিনি "সি ++" এবং "ভিএস" সংমিশ্রণটি দেখান না, তবে

সি # এবং ভিএস সহ টিডিডি: http://vimeo.com / অ্যালবাম / 210446

সি ++ এবং Elpipse সহ টিডিডি: http://vimeo.com/13240481

সম্ভবত আপনি এই দুটি থেকে এটি কাজ করতে পারেন।

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

http://schuchert.wikispaces.com/tdd.cpp.NotesOnCppUTest

যা আপনাকে ভিজ্যুয়াল স্টুডিওতে সিপুপিস্টেস্ট কীভাবে ব্যবহার করতে হয় তার তথ্য দেয়।


2
ডক - আমি (কেবলমাত্র) টিডিডি / একলাইপ ভিডিওটি দেখেছি তবে আমি এইটিকে নীচে নামিয়ে দেব। ভিডিও ঠিক দেখানো হয় কি আমি করছি না যথা কিভাবে ইউনিট টেস্ট কোড লিখতে হয়, আগ্রহী। সমস্যা (এই প্রশ্নের) ইউনিট টেস্টগুলি লিখছে না, এটি কীভাবে সঠিকভাবে আপনার সি ++ উত্পাদন বিকাশের সাথে তাদের একীভূত করা যায় এবং এই ভিডিওগুলি এখানে কীভাবে সহায়তা করে তা আমি দেখতে পাই না।
মার্টিন বা

যদিও আমি এই প্রশ্নের প্রসঙ্গে এই উত্তরটিকে অগ্রাহ্য করেছি, আমি যুক্ত করতে চাই যে ভিডিওগুলি বেশ সুন্দর। আমি Eclipse / TDD / C ++ দেখতে আকর্ষণীয় পেয়েছি। এটি কেবল এখানে সহায়তা করে না :-)
মার্টিন বা

@ মার্টিন: আমার সম্পাদনা দেখুন।
ডক ব্রাউন

আপনার প্রচেষ্টার প্রশংসা করা হয়েছে এবং যদিও আমি মনে করি না যে এই অতিরিক্ত লিঙ্কটি এই প্রশ্নের প্রসঙ্গে সত্যই সহায়ক, তবে আমি মনে করি আমার নিজের কিছু সম্পাদনা করা দরকার।
মার্টিন বা

@ মার্টিন: ঠিক আছে, আমি আবার আপনার প্রশ্ন এবং আপনার "সহনীয়" সংজ্ঞাটি পড়েছি, তবে আপনি কি একটু বেশি আশা করবেন না? ইউনিট টেস্টিং প্রকল্প স্থাপন করা "" একটি ক্লিক "সমাধান নয়, তবে প্রকৃত ইউনিট পরীক্ষার লেখার প্রয়াস যে পরিমাণের অর্ডার দিয়ে আপনি যে কোনও কাঠামো ব্যবহার করছেন তা ছাড়িয়ে যায়।
ডক ব্রাউন

1

ভিসি ++ এর সাথে কীভাবে সংহত করা যায় তা গুগলতেস্ট

আপনার একটি প্লাগইন লাগবে না, পরীক্ষাটি কেবলমাত্র অন্য লক্ষ্য। সি ++ দিয়ে পরীক্ষা উত্পন্ন করার জন্য কোনও প্লাগইন নেই, যদি আপনি এটির মতো অ্যাসাইনমেন্টের মতো অর্থহীন স্টাফটি পরীক্ষা করতে পারতেন তবে প্রকাশিত হবে ne


"এমনকি যদি আপনি এটি অ্যাসাইনমেন্টের মতো অর্থহীন স্টাফগুলিও পরীক্ষা করতে পারতেন" - এর অর্থ কী? আপনি কি সত্যিই ভাবেন যে সি ++ তে ইউনিট টেস্টের জন্য আরও ভাল আইডিই সমর্থন মূল্যহীন ??
মার্টিন বা

আমি সি ++ এর মতো ভাষার অর্থ সিস্টেমটি সুস্পষ্ট বক্তব্য ছাড়া অন্য কোনও কিছুর জন্য স্বয়ংক্রিয়ভাবে পরীক্ষা তৈরি করতে পারে না
মার্টিন বেকেট

2
কেন না? vcprojফ্লাইয়ে একটি ফাইল স্বয়ংক্রিয়ভাবে উত্পন্ন করতে কোনও প্লাগইন বাধা সৃষ্টি করছে , তিনি যে ফাইলটি লিখেছেন তা পরীক্ষার জন্য ফাইলটি এবং রেফারেন্সড প্রোডাকশন ফাইলটি টানছেন এবং এটি চালানোর চেষ্টা করছেন? (কেবল স্বপ্ন দেখছি, তবে এটি কাজ করে দেওয়া যেতে পারে))
মার্টিন বা

2
আমি নিশ্চিত না যে আমি অনুসরণ করতে পারি। স্পষ্টতই আমাকে নিজে টেস্ট লিখতে হবে । তবে এগুলি চালানো আরও সহজ করে দেওয়া যেতে পারে যে ম্যানুয়ালি আলাদা টেস্ট-প্রকল্প-ফাইল সেটআপ করা (এবং বজায় রাখতে হবে!)।
মার্টিন বা

2
না, আমি পরীক্ষার কোডটি উল্লেখ করেছিলাম না, বরং পরীক্ষার কোডটি চালানোর জন্য "এটি" প্রোডাকশন কোড পেতে প্রয়োজনীয় প্রকল্প / সংকলক স্ক্যাফোোল্ডিংয়ের প্রয়োজন।
মার্টিন বা

1

সি ++ সরঞ্জামগুলিতে কোনও মন্তব্য করা যায় না কারণ আমি প্রায় 20 বছর (.NET দেব এই দিনগুলিতে) স্পর্শ করি নি এবং আমি অনুমান করি যে এই সময়ের বেশিরভাগ সরঞ্জামগুলি পরিচালিত কোডের জন্য তবে কৌশল হিসাবে রয়েছে ...

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

প্রোডাকশন কোড টিডিডির জন্য কিছুটা আলাদা লিখতে হয় এবং হয়। আপনি প্রথম পরীক্ষাগুলি লিখতে গেলে আপনার কোডটিকে পরীক্ষামূলক বলে ডিজাইন করতে হবে। এটি নিজেই পুরো অন্যান্য বিষয় তবে সময় নিতে পারে এবং প্রথমে খুব হতাশাজনক মনে হতে পারে বিশেষত যদি আপনার আইডিই / সরঞ্জামগুলি আপনাকে দ্রুত প্রতিক্রিয়া না দেয়, পরীক্ষা চালানোর জন্য কমান্ড-লাইন সরঞ্জাম চালানোর জন্য শেলিং কেবল বিঘ্নজনক।

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

আপনার যে বইটি দরকারী মনে হতে পারে তা হ'ল; মাইকেল পালক, লিগ্যাসি কোড সহ কার্যকরভাবে কাজ করছে। এটি এর উদাহরণগুলিতে একাধিক ভাষাগুলি ব্যবহার করে এবং কোড / কৌশলগুলি নিরাপদে অভিযোজিত করার জন্য নির্দিষ্ট পদ্ধতিগুলি সনাক্ত করতে আপনাকে সহায়তা করতে পারে যা মূলত পরীক্ষার জন্য নকশাকৃত নয়।

ছোট সতর্কতা: আমি কয়েক বছর আগে অ্যাগিল কুল-এইড থেকে মাতাল: ডি


দ্রষ্টব্য: আমি ইতিমধ্যে Working Effectively with Legacy Codeআমার ডেস্কে রয়েছি :-)
মার্টিন বা

0

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

আমি যে প্লাগইনগুলি পেয়েছি তার সন্ধান করছি:

http://incubator.apache.org/npanday/

তবে এটি এখনও খুব পরিপক্ক বলে মনে হচ্ছে না। ম্যাভেন সেটআপ দিয়ে পরীক্ষা চালানোর জন্য আপনাকে যা করতে হবে তা mvn testকমান্ড লাইনে চালিত হবে ।

আপনি যদি আপনি এটি সম্পর্কে জানতে পারবেন আগ্রহী হন, তাহলে এখানে এবং (এক) সি ++ প্লাগিন সমর্থনকারী এখানে (ম্যাভেন তাই সবকিছু একটি প্লাগ হয় একটি প্লাগইন স্থাপত্য আছে)।


0

ফ্রেমওয়ার্কের সুপারিশ: আমাদের অফিসে, আমরা টেস্টড্রাইভন.এনইটি ব্যবহার করি যা ভিজ্যুয়াল স্টুডিওর সাথে সংহত করে। ইউনিটেস্ট ক্লাসগুলি সি ++ / সিএলআইতে লিখিত হয়, যা আপনাকে যা পরীক্ষা করতে হবে তার নেটিভ কোডটি প্রয়োগ করার জন্য কল করতে পারে। হ্যাঁ, সি ++ / সিএলআই ক্লাসগুলি তাদের নিজস্ব সমাবেশে যায়, সুতরাং সমাধানগুলিতে "পরীক্ষামূলক" প্রকল্প যুক্ত হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.