تحميل - كيفية إعداد اختبار الوحدة لـ Visual Studio C++




microsoft visual c++ runtime library (8)

أنا أحب CxxTest كذلك للأسباب نفسها. إنه ملف رأس فقط لذا لا يوجد رابط مطلوب. أنت لست عالقاً مع بيرل حيث يوجد عداء بايثون أيضاً. سوف أراجع مكتبة google قريبا. تسحب أشياء Boost الكثير من الأمتعة الأخرى.

أواجه مشكلة في معرفة كيفية إعداد إطار الاختبار واستخدامه في Visual Studio 2008 لـ C ++ بشكل افتراضي مع مجموعة اختبار الوحدة المضمنة.

أي روابط أو برامج تعليمية سيكون موضع تقدير.


أنا استخدم UnitTest++ .

في السنوات التي أعقبت إنشاء هذه المشاركة ، انتقل المصدر من SourceForge إلى Github. كما أن البرنامج التعليمي المثال الآن أكثر ملحد - لا يذهب إلى أي تكوين أو مشروع إعداد على الإطلاق.

أشك في أنه سيظل يعمل لـ Visual Studio 6 كما يتم الآن إنشاء ملفات المشروع عبر CMake. إذا كنت لا تزال بحاجة إلى دعم الإصدار القديم ، فيمكنك الحصول على آخر إصدار متاح تحت فرع SourceForge .


الأدوات التي تم ذكرها هنا هي كل أدوات سطر الأوامر. إذا كنت تبحث عن حل أكثر تكاملاً ، فقم بإلقاء نظرة على استوديو cfix ، وهو عبارة عن Visual Studio AddIn لاختبار وحدة C / C ++. وهو مشابه تماماً لـ TestDriven.Net ، ولكن لـ (غير مُدار) C / C ++ بدلاً من .NET.


الإطار المتضمن مع VS9 هو .NET ، ولكن يمكنك كتابة اختبارات في C ++ / CLI ، طالما أنك مرتاح لتعلم بعض isms .NET ، يجب أن تكون قادراً على اختبار معظم أي رمز C ++.

و http://code.google.com/p/googletest/ ننظر إلى أن تكون مشابهة إلى حد ما ، ولكن تكييفها لاستخدامات مختلفة قليلا. يحتوي كلاهما على مكون ثنائي ، لذا ستحتاج إلى مشروع إضافي في الحل الخاص بك لتجميع الاختبارات وتشغيلها.

الإطار الذي نستخدمه هو CxxTest ، وهو أخف كثيرًا ؛ أنها رؤوس فقط ، ويستخدم برنامج نصي Perl (!) لتتخلص من معلومات مجموعة الاختبار من رؤوسك (ترث الأجنحة من CxxTest :: Base ، تبدأ جميع أسماء طرق الاختبار بـ "اختبار"). من الواضح أن هذا يتطلب حصولك على Perl من مصدر أو another ، مما يضيف النفقات العامة إلى إعداد بيئة البناء الخاصة بك.


كنت أعاني لتنفيذ اختبار وحدة لتطبيق C ++ غير مُدار في بيئة Windows باستخدام Visual Studio. لذلك تمكنت من التغلب على وكتب وظيفة كإرشاد خطوة بخطوة لاختبار وحدة تطبيق C ++ غير مُدار. آمل أن يساعدك ذلك.

اختبار الوحدة لـ C ++ غير مُدار في Visual Studio


لست متأكدًا بنسبة 100٪ من VS2008 ، لكنني أعلم أن إطار اختبار الوحدات الذي تم شحنه في Microsoft VS2005 كجزء من مجموعة Team الخاصة بهم كان فقط لـ .NET وليس C ++

لقد استخدمت CppUnit أيضا وكان بخير. كثير نفس ال NUnit / JUnit / هكذا فوق.

إذا كنت قد استخدمت الدفعة ، فلديك أيضًا مكتبة اختبار للوحدات

لدى اللاعبين الذين يقفون وراءهم بعض الترميز الخطير ، لذلك أود أن أقول أن إطارهم يجب أن يكون جيدًا ، لكنه قد لا يكون الأكثر سهولة في الاستخدام :-)


هنا هو النهج الذي استخدمه لاختبار وحدة IIS URL Rewrite في Microsoft (وهو يستند إلى سطر الأوامر ، ولكن يجب أن يعمل مع VS أيضًا):

  1. تأكد من أن ملفات رأسك قابلة للاستهلاك عن طريق نقل شفرة المصدر إلى ملفات cpp واستخدام الإعلان الأمامي إذا لزم الأمر.
  2. ترجمة التعليمات البرمجية الخاصة بك لاختبار كمكتبة (.lib)
  3. إنشاء مشروع UnitTest كـ C ++ مع دعم CLR.
  4. قم بتضمين ملفات الرأس الخاصة بك.
  5. تضمين ملفاتك .lib.
  6. قم بإضافة مرجع إلى Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. استخدم صفًا صغيرًا حقًا للإعلان عن اختبار الوحدة والقفز من التعليمات البرمجية المدارة إلى C ++ / Native مثل هذا (قد تحتوي على أخطاء إملائية):

هنا مثال:

// Example
#include "stdafx.h"
#include "mstest.h"

// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
  // Arrange
  Adder yourNativeObject;
  int expected = 3;
  int actual;
  // Act
  actual = yourNativeObject.Add(1, 2);
  // Assert
  Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}

// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
  [TestMethod]
  void AddTwoNumbersTest() {
     // Just jump to C++ native code (above)
     ::AddTwoNumbersTest();
  }
};

مع هذا الأسلوب ، لا يحتاج الأشخاص إلى تعلم الكثير من الأشياء C ++ / CLI ، سيتم إجراء كل الاختبار الحقيقي في C ++ الأصلي وسيتم استخدام فئة TestShim لنشر الاختبار إلى MSTest.exe (أو جعله مرئيًا ).

لإضافة اختبارات جديدة تقوم فقط بتعريف أسلوب جديد [TestMethod] فارغ NewTest () {:: NewTest ()؛} ووظيفته الجديدة NewTest () باطلة. لا وحدات الماكرو ، لا الحيل ، straighforward.

الآن ، يكون ملف الرأس اختياريًا ، ولكن يمكن استخدامه لفضح أساليب Assert class مع التواقيع الأصلية C ++ (على سبيل المثال wchar_t * بدلاً من Stirng ^) ، لذلك يمكنك الاحتفاظ بها قريبة من C ++ وبعيدًا عن C ++ / CLI :

هنا مثال:

// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
    static void AreEqual(int expected, int actual) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
    }

    static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
    }

    template<typename T>
    static void AreEqual(T expected, T actual) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
    }

    // Etcetera, other overloads...
}
#pragma managed(pop)

HTH


هذه الصفحة قد تساعد ، ويستعرض عدد غير قليل من أطر اختبار وحدة C ++:

  • CppUnit
  • Boost.Test
  • CppUnitLite
  • NanoCppUnit
  • وحدة ++
  • CxxTest

تحقق من CPPUnitLite أو CPPUnitLite2 .

تم إنشاء CPPUnitLite بواسطة Michael Feathers ، الذي قام في الأصل بنقل JUnit من Java إلى C ++ كما CPPUnit (يحاول CPPUnit محاكاة نموذج تطوير JUnit - لكن C ++ تفتقر إلى ميزات Java [مثل الانعكاس] لجعلها سهلة الاستخدام).

يحاول CPPUnitLite إنشاء إطار اختبار C ++ - حقيقي ، وليس نظام Java تم نقله إلى C ++. (أنا أعيد صياغه من عمل الريش بكفاءة مع كتاب Legacy Code ). يبدو أن CPPUnitLite2 عبارة عن كتابة أخرى ، مع المزيد من الميزات وإصلاحات الأخطاء.

أنا أيضا تعثرت فقط عبر UnitTest++ الذي يتضمن أشياء من CPPUnitLite2 وبعض الأطر الأخرى.

لقد أصدرت مايكروسوفت WinUnit .

أيضا الخروج Catch أو Doctest





testing