سؤال

أعلم أن هناك بالفعل بعض الأسئلة المتعلقة بالتوصيات الخاصة بأطر اختبار وحدة C++، لكن جميع الإجابات لم تساعد لأنها توصي فقط بأحد الأطر ولكنها لا تقدم أي معلومات حول مقارنة (الميزات).

أعتقد أن الأطر الأكثر إثارة للاهتمام هي CppUnit وBoost وإطار اختبار Google الجديد.هل قام أي شخص بأي مقارنة حتى الآن؟

هل كانت مفيدة؟

المحلول

انظر هذا السؤال لبعض المناقشات.

ويوصون المواد: استكشاف C ++ وحدة اختبار الإطار الغابة أو بواسطة نويل Llopis. وأكثر حداثة: C ++ اختبار وحدة الأطر

ولم أجد مقالا يقارن googletest إلى الأطر الأخرى حتى الان.

نصائح أخرى

لاعب جديد هو اختبار جوجل (المعروف أيضًا باسم إطار اختبار جوجل C++) وهو أمر جميل بالرغم من ذلك.

#include <gtest/gtest.h>

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

الخصائص الرئيسية:

  • محمول
  • قاتلة و تأكيدات غير قاتلة
  • تأكيدات سهلة بالمعلومات رسائل: ASSERT_EQ(5, Foo(i)) << " where i = " << i;
  • اختبار جوجل تلقائيا يكتشف اختباراتك ولا يطلب منك تعدادها لتشغيلها
  • اجعل الأمر سهلاً يمتد مفردات التأكيد الخاصة بك
  • اختبارات الموت (انظر الدليل المتقدم)
  • SCOPED_TRACE للحلقات الروتينية
  • تستطيع ان تقرر التي اختبارات لتشغيل
  • XML توليد تقرير الاختبار
  • تركيبات / وهمية / قوالب...

لقد قمت للتو بدفع الإطار الخاص بي، يمسك, ، في الخارج.إنه لا يزال قيد التطوير ولكني أعتقد أنه يتفوق بالفعل على معظم الأطر الأخرى.لدى الأشخاص المختلفين معايير مختلفة ولكني حاولت تغطية معظم الأمور دون الكثير من المقايضات.قم بإلقاء نظرة على إدخال مدونتي المرتبطة لتذوقه.أهم خمس مميزات عندي هي:

  • رأس فقط
  • التسجيل التلقائي للاختبارات القائمة على الوظيفة والطريقة
  • يقوم بتحليل تعبيرات C++ القياسية إلى LHS وRHS (لذلك لا تحتاج إلى مجموعة كاملة من وحدات الماكرو المؤكدة).
  • دعم الأقسام المتداخلة داخل تركيبات تعتمد على الوظيفة
  • اختبارات الأسماء باستخدام اللغة الطبيعية - يتم إنشاء أسماء الوظائف/الطرق

كما أن لديها روابط Objective-C.يتم استضافة المشروع على جيثب

تعزيز مكتبة الاختبار يعد خيارًا جيدًا للغاية خاصة إذا كنت تستخدم Boost بالفعل.

// 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%
}

انه يدعم:

  • تلقائي أو تسجيل الاختبارات اليدوية
  • تأكيدات كثيرة
  • المقارنة التلقائية مجموعات
  • تنسيقات الإخراج المختلفة (بما في ذلك XML)
  • تركيبات / قوالب...

ملاحظة:كتبت مقالًا عنه قد يساعدك في البدء: إطار اختبار وحدة C++:برنامج تعليمي لاختبار التعزيز

ويكيبيديا لديه قائمة rel="noreferrer"> ، مع الجداول التي تحدد ملامح تدعم أو لا .

لقد افرجت مؤخرا xUnit++, ، على وجه التحديد كبديل لاختبار Google ومكتبة اختبار Boost (اعرض ملف مقارنات).إذا كنت معتادًا على 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));
}

الخصائص الرئيسية:

  • سريع بشكل لا يصدق:تشغيل الاختبارات بشكل متزامن.
  • محمول
  • تلقائي تسجيل الاختبار
  • كثير أنواع التأكيد (لا يحتوي Boost على أي شيء على xUnit++)
  • يقارن مجموعات محليا.
  • التأكيدات تأتي ثلاثة المستويات:
    • أخطاء قاتلة
    • أخطاء غير مميتة
    • تحذيرات
  • سهل يجزم تسجيل: Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
  • امتحان تسجيل: Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
  • تركيبات
  • تعتمد على البيانات الاختبارات (النظريات)
  • حدد الاختبارات التي تريد تشغيلها مرتكز على:
    • مطابقة السمات
    • مطابقة السلسلة الفرعية للاسم
    • أجنحة الاختبار

CppUTest - لطيفة جدا، والإطار خفيفة الوزن مع المكتبات وهمية. من المفيد أن نلقي نظرة فاحصة.

وCPUnit ( http://cpunit.sourceforge.net ) هو إطار مشابه لاختبار Google، ولكن الذي يعتمد على أقل ماك (يؤكد على وظائف)، وحيث يتم مسبوقة وحدات الماكرو لتفادي الوقوع في شرك الكلي المعتاد. اختبارات تبدو مثل:

#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.
    }

}

وانهم لصناعة السيارات في التسجيل، بحيث لا تحتاج إلى أكثر من ذلك. ثم انها مجرد تجميع والتشغيل. أجد باستخدام هذا الإطار يشبه إلى حد كبير باستخدام أداة JUnit، بالنسبة لأولئك الذين لديهم لقضاء بعض الوقت البرمجة جافا. لطيفة جدا!

وهناك بعض C ++ موارد وحدة اختبار ذات الصلة في http://www.progweap.com/resources.html

مدقق سلامة API — إطار اختبار لمكتبات C/C++:

مولد تلقائي لاختبارات الوحدة الأساسية لمكتبة C/C++ مشتركة.إنه قادر على إنشاء بيانات إدخال معقولة (في معظم الحالات، ولكن للأسف ليس كلها) للمعلمات وإنشاء حالات اختبار بسيطة ("العقلانية" أو "السطحية") لكل وظيفة في واجهة برمجة التطبيقات (API) من خلال تحليل الإعلانات في الرأس ملفات.

تسمح جودة الاختبارات التي تم إنشاؤها بالتحقق من عدم وجود أخطاء فادحة في حالات الاستخدام البسيطة.الأداة قادرة على إنشاء وتنفيذ الاختبارات التي تم إنشاؤها واكتشاف الأعطال (الأخطاء الفردية)، والإجهاض، وجميع أنواع الإشارات المنبعثة، ورمز إرجاع البرنامج غير الصفري، وتعليق البرنامج.

ميزات فريدة بالمقارنة مع CppUnit وBoost وGoogle Test:

  • الإنشاء التلقائي لبيانات الاختبار ووسائط الإدخال (حتى بالنسبة لأنواع البيانات المعقدة)
  • حديثة وقابلة لإعادة الاستخدام بدرجة كبيرة أنواع متخصصة بدلاً من التركيبات والقوالب
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top