সি ++ ইউনিট পরীক্ষার ফ্রেমওয়ার্কগুলির তুলনা [বন্ধ]


299

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

আমি মনে করি সবচেয়ে আকর্ষণীয় ফ্রেমওয়ার্কগুলি হ'ল সিপিউউনিত, বুস্ট এবং নতুন গুগল পরীক্ষার কাঠামো। কেউ কি এখনও কোন তুলনা করেছেন?



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

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

উত্তর:


99

কিছু আলোচনার জন্য এই প্রশ্নটি দেখুন

তারা নিবন্ধগুলির প্রস্তাব দেয়: সি ++ ইউনিট টেস্টিং ফ্রেমওয়ার্ক জঙ্গল অন্বেষণ , নোয়েল ললোপিস দ্বারা। এবং আরও সাম্প্রতিক: সি ++ টেস্ট ইউনিট ফ্রেমওয়ার্ক

গুগলস্টকে অন্যান্য ফ্রেমওয়ার্কের সাথে তুলনা করে এমন কোনও নিবন্ধ আমি এখনও পাইনি।


যেমনটি আমি লিখেছি: সমস্ত উত্তর কেবল একটি ফ্রেমওয়ার্কের পুনরুদ্ধার করে তবে ফ্রেমওয়ার্কটিকে অন্যটির সাথে তুলনা করে না।
গৃহকর্তা

আপনি নিবন্ধটি নিয়ে খুশি নন?
গিশু

7
একটি সমালোচনা: নিবন্ধটি ভাল হলেও 2004 এর এবং এটি গুগল টেস্টের অন্তর্ভুক্ত নয়।
richq

2
প্রথম লিঙ্কে আপনি দুটি তুলনা দেখতে পাবেন। গুগল থেকে নতুন কাঠামো ব্যতীত, বেশিরভাগ তথ্য (এখনও?) প্রাসঙ্গিক। (এবং সিপ্পুনিট সবচেয়ে আকর্ষণীয় নয়, এটি ব্যবহার করা খুব আনাড়ি)
লুক হার্মিট

1
সংযোগগুলি স্থির করে এবং আরও সাম্প্রতিক তুলনায় উত্তরটি প্রসারিত করেছে
স্যাম সাফ্রন 21

120

একটি নতুন খেলোয়াড় হ'ল গুগল টেস্ট ( গুগল সি ++ টেস্টিং ফ্রেমওয়ার্ক হিসাবেও পরিচিত ) এটি বেশ সুন্দর।

#include <gtest/gtest.h>

TEST(MyTestSuitName, MyTestCaseName) {
    int actual = 1;
    EXPECT_GT(actual, 0);
    EXPECT_EQ(1, actual) << "Should be equal to one";
}

প্রধান বৈশিষ্ট্য:

  • সুবহ
  • মারাত্মক এবং অ-মারাত্মক বক্তব্য
  • সহজ assertions তথ্যমূলক বার্তা :ASSERT_EQ(5, Foo(i)) << " where i = " << i;
  • গুগল টেস্ট স্বয়ংক্রিয়ভাবে আপনার পরীক্ষাগুলি সনাক্ত করে এবং এগুলি চালানোর জন্য আপনাকে সেগুলি গণনার প্রয়োজন হয় না
  • আপনার দৃ voc় শব্দভাণ্ডার প্রসারিত করা সহজ করুন
  • মৃত্যু পরীক্ষা (উন্নত গাইড দেখুন)
  • SCOPED_TRACE সাবরুটিন লুপের জন্য
  • কোন পরীক্ষা চালাতে হবে তা আপনি সিদ্ধান্ত নিতে পারেন
  • এক্সএমএল পরীক্ষার রিপোর্ট জেনারেশন
  • ফিক্সচার / উপহাস / টেম্পলেট ...

3
আমি বিশেষত গুগলমক ফ্রেমওয়ার্কে খুঁজে পাওয়া যায় এমন মশকরা সক্ষমতার সাথে অন্যান্য কয়েকটি ফ্রেমওয়ার্কগুলিতে গুগল পরীক্ষাটি ব্যবহার করে উপভোগ করি।
মাইক

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

2
এটি গুগল সি ++ মজাদার ফ্রেমওয়ার্কের সাথে একত্রিত করে এটি ইউনিট টেস্ট সি ++ কোডের জন্য xUnit পরীক্ষার কাঠামোটিকে সত্যই শক্তিশালী করে তোলে।
রটকোক

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

যদিও আমি তাদের ম্যাক্রোগুলির অত্যধিক ব্যবহার অপছন্দ করি এবং সত্য যে টেস্টের মতো সাধারণ শব্দ ব্যবহার করে যা কোনও কিছুর সাথে সংঘর্ষিত হতে পারে। জিটিইএসটি আরও ভাল হবে, সংঘর্ষের সম্ভাবনা কম।
ক্যাশকো

111

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

  • কেবল শিরোনাম
  • ফাংশন এবং পদ্ধতি ভিত্তিক পরীক্ষার স্বয়ংক্রিয়ভাবে নিবন্ধকরণ
  • এলএইচএস এবং আরএইচএসে স্ট্যান্ডার্ড সি ++ এক্সপ্রেশনগুলি দ্রবীভূত করে (যাতে আপনার দৃ as় ম্যাক্রোগুলির পুরো পরিবারের প্রয়োজন হয় না)।
  • একটি ফাংশন ভিত্তিক স্থিরতার মধ্যে নেস্টেড বিভাগগুলির জন্য সমর্থন
  • প্রাকৃতিক ভাষা ব্যবহার করে নাম পরীক্ষা - ফাংশন / পদ্ধতির নাম উত্পন্ন হয়

এটিতেও অবজেক্টিভ-সি বাইন্ডিং রয়েছে। প্রকল্পটি গিথুব-এ হোস্ট করা হয়েছে


যোগ CHECK_FLASEএবং REQUIRE_FLASEম্যাক্রোগুলি বিবেচনা করুন ।
এমিল কর্মিয়ার

6
আমার মতে সেরা কাঠামো।
কফডেভলপার

3
doctest চেকআউট - সংকলন গতির উপর একটি বিশাল ফোকাস সঙ্গে ক্যাচ আমার reimplementation হয় প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী দেখতে কিভাবে তারা বিসদৃশ্য
onqtam

@ আইনপোকলুম ক্যাচটি পরিত্যাজ্য নয় - স্রষ্টা গ্রন্থাগারের দ্বিতীয় সংস্করণে কাজ করছেন। ডক্টেস্ট কিছু বোনাস ডিজাইনের সিদ্ধান্তের সাথে ক্যাচ 1 এর পুনরায় বাস্তবায়ন করা হয়েছে
onttam

2
সমস্ত টেস্টিং ফ্রেমওয়ার্কের সাথে তুলনা করার সময় আমি সত্যিই ক্ষতিগ্রস্থ হয়েছি (যার মধ্যে একটিটি এখন আমাকে বেছে নিতে হবে)। আপনি কি ক্যাচ এবং অন্যান্য অফারের সাথে ডকাস্টের তুলনা এবং বিপরীতে ডক্টরেটের নিজের উত্তর লিখবেন?
einpoklum

53

বুস্ট টেস্ট লাইব্রেরি একটি খুব ভাল পছন্দ বিশেষত যদি আপনি ইতিমধ্যে বুস্ট ব্যবহার করছেন।

// TODO: Include your class to test here.
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(MyTestCase)
{
    // To simplify this example test, let's suppose we'll test 'float'.
    // Some test are stupid, but all should pass.
    float x = 9.5f;

    BOOST_CHECK(x != 0.0f);
    BOOST_CHECK_EQUAL((int)x, 9);
    BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001%
}

এটি সমর্থন করে:

  • স্বয়ংক্রিয় বা ম্যানুয়াল পরীক্ষার নিবন্ধকরণ
  • অনেক জোর
  • সংগ্রহগুলির স্বয়ংক্রিয় তুলনা
  • বিভিন্ন আউটপুট ফর্ম্যাট ( এক্সএমএল সহ )
  • ফিক্সচার / টেমপ্লেট ...

পিএস: আমি এটি সম্পর্কে একটি নিবন্ধ লিখেছিলাম যা আপনাকে শুরু করতে সহায়তা করতে পারে: সি ++ ইউনিট টেস্টিং ফ্রেমওয়ার্ক: একটি বুস্ট টেস্ট টিউটোরিয়াল


আমি বুস্ট পরীক্ষাটি ব্যবহার করতাম এবং এটি পছন্দ হয়েছিল কেবল এটি ছাড়া যে এটি মুক্তির মধ্যে উল্লেখযোগ্যভাবে পরিবর্তিত হবে। এপিআই পরিবর্তিত হওয়ার সময় পরীক্ষাগুলি ফিক্সিংয়ের ব্যতীত আমার বেশি সময় (এবং তাদের অর্থ) ব্যয় না করেই আমার ক্লায়েন্টের কাছে বিক্রয় বিক্রয় ইউনিট পরীক্ষা করা কঠিন ছিল, কোডটি সংশোধন করার চেয়ে বোঝা যাচ্ছিল than শেষ পর্যন্ত আমি এটিকে আঁকিয়েছি এবং আমার নিজের লেখা - এটি প্রায় 5 বছর আগে যদিও though
উপাদান 10

5
টিউটোরিয়াল লিঙ্কটি নষ্ট হয়েছে
মেলকোট

2
@ মিলসকোট এটি আবার কাজ করে।
ক্রিস জেস্টার-ইয়াং

@ মিলসকোট এর জন্য দুঃখিত, আপনি যদি এটি ভগ্নহীন দেখেন তবে আমাকে সরাসরি একটি ইমেল প্রেরণ করুন। এটি একটি মন্তব্যের চেয়ে সন্ধান করা সহজ। :)
ওয়ার্নাইট

@ ওয়ার্নাইট ইয়ুপ, আবার কাজ করে। ধন্যবা
mloskot


16

আমি সম্প্রতি xUnit ++ প্রকাশ করেছি , বিশেষত গুগল টেস্ট এবং বুস্ট টেস্ট লাইব্রেরির বিকল্প হিসাবে ( তুলনা দেখুন )। আপনি যদি xUnit.Net এর সাথে পরিচিত হন তবে আপনি xUnit ++ এর জন্য প্রস্তুত।

#include "xUnit++/xUnit++.h"

FACT("Foo and Blah should always return the same value")
{
    Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return \"0\".";
    Assert.Equal(Foo(), Blah());
}

THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected),
    std::make_tuple(0, "0"),
    std::make_tuple(1, "1"),
    std::make_tuple(2, "2"))
{
    Assert.Equal(expected, Foo(input));
}

প্রধান বৈশিষ্ট্য:

  • অবিশ্বাস্যরূপে দ্রুত: পরীক্ষাগুলি একযোগে চলমান ।
  • সুবহ
  • স্বয়ংক্রিয় পরীক্ষার নিবন্ধকরণ
  • অনেকগুলি দৃ types়পদ প্রকারের (xUnit ++ এ বুস্টের কিছুই নেই)
  • স্থানীয়ভাবে সংগ্রহের তুলনা করে ।
  • জোর তিনটি স্তরে আসে:
    • মারাত্মক ত্রুটি
    • অ-মারাত্মক ত্রুটি
    • সতর্কবার্তা
  • সহজ দৃ log লগিং:Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
  • পরীক্ষার লগিং:Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
  • রাজধানী
  • ডেটা-চালিত পরীক্ষা (তত্ত্বগুলি)
  • উপর নির্ভর করে কোন পরীক্ষা চালাতে হবে তা নির্বাচন করুন:
    • বৈশিষ্ট্য মেলানো
    • নাম সাবস্ট্রিং ম্যাচিন
    • টেস্ট স্যুট

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

যথেষ্ট ফর্সা। :) আমার ইতিমধ্যেই একটি পেয়েছেন তুলনা টেবিল উপর উইকি , কিন্তু আমি আমার উত্তর সরাসরি পার্থক্য কয়েক যোগফল করতে চেষ্টা করবে।
মোসওয়াল্ড

1
আমি কেবল উইকি টেবিলটি সরাসরি লিঙ্ক করার সিদ্ধান্ত নিয়েছি, এটি সমস্ত তালিকাতে সংক্ষিপ্তসারটি ছড়িয়ে দিচ্ছিল।
মোসওয়াল্ড

লিঙ্কটি আমার জন্য কাজ করে, ধন্যবাদ! +1
এম্লোসকোট

1
আপনার প্রকল্পটি বন্ধ হয়ে গেছে? শেষ প্রতিশ্রুতি 09/2015 তারিখের ... যাইহোক, দুর্দান্ত উত্তর। ধন্যবাদ।
zertyz


4

সিপিউনিট ( http://cpunit.sourceforge.net ) এমন একটি কাঠামো যা গুগল টেস্টের অনুরূপ, তবে এটি কম ম্যাকো (আস্থাগুলিগুলি ফাংশনগুলি) এর উপর নির্ভর করে এবং যেখানে ম্যাক্রোগুলি সাধারণ ম্যাক্রো সমস্যা এড়াতে উপসর্গযুক্ত থাকে। টেস্টগুলি দেখতে দেখতে:

#include <cpunit>

namespace MyAssetTest {
    using namespace cpunit;

    CPUNIT_FUNC(MyAssetTest, test_stuff) {
        int some_value = 42;
        assert_equals("Wrong value!", 666, some_value);
    }

    // Fixtures go as follows:
    CPUNIT_SET_UP(MyAssetTest) {
        // Setting up suite here...
        // And the same goes for tear-down.
    }

}

তারা স্বতঃ-নিবন্ধন করে, সুতরাং এর চেয়ে বেশি আপনার দরকার নেই। তারপরে এটি কেবল সংকলন এবং চালানো হয়। আমি এই কাঠামোটি খুব বেশি ব্যবহার করে জুনিট ব্যবহার করার মতো দেখতে পাই, যাদের জাভা প্রোগ্রামিংয়ের জন্য কিছুটা সময় ব্যয় করতে হয়েছিল। খুব সুন্দর!



2

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

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

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

সিপিপিউনিট, বুস্ট এবং গুগল পরীক্ষার তুলনায় অনন্য বৈশিষ্ট্য:

  • পরীক্ষার ডেটা এবং ইনপুট আর্গুমেন্টগুলির স্বয়ংক্রিয় জেনারেশন (এমনকি জটিল ডেটা টাইপের জন্যও)
  • ফিক্সচার এবং টেম্পলেটগুলির পরিবর্তে আধুনিক এবং অত্যন্ত পুনরায় ব্যবহারযোগ্য বিশেষ ধরণের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.