Visual Studio C ++ के लिए यूनिट टेस्टिंग कैसे सेट करें


93

मैं मुसीबत पता लगाना परीक्षण ढांचे में और प्रयोग करने योग्य सेट पाने के लिए आ रही हैं विजुअल स्टूडियो 2008 के लिए C++निर्मित इकाई परीक्षण सूट के साथ शायद।

किसी भी लिंक या ट्यूटोरियल की सराहना की जाएगी।


Google C ++ टेस्ट फ्रेमवर्क जारी करता है जो xUnit फ्रेमवर्क के साथ बहुत समान है। http://code.google.com/p/googletest/
popopome

आपने किस रूपरेखा का उपयोग किया है?
जोकिम कार्लसन

वास्तव में मैंने अभी भी उनमें से किसी का उपयोग नहीं किया है। मैंने तय किया कि मैं यूनिट परीक्षणों पर जो काम कर रहा था, वह समय का सबसे प्रभावी उपयोग नहीं था।
DShook

जवाबों:


56

यह पृष्ठ मदद कर सकता है, यह कुछ C ++ इकाई परीक्षण रूपरेखाओं की समीक्षा करता है:

  • CppUnit
  • Boost.Test
  • CppUnitLite
  • NanoCppUnit
  • यूनिट ++
  • CxxTest

की जाँच करें CPPUnitLite या CPPUnitLite2

CPPUnitLite को माइकल फेयर्स द्वारा बनाया गया था, जिन्होंने मूल रूप से Java के JUnit को C ++ में CPPUnit के रूप में चित्रित किया था (CPPUnit JUnit के विकास मॉडल की नकल करने की कोशिश करता है - लेकिन C ++ ने जावा की विशेषताओं [उदा। प्रतिबिंब] का उपयोग करना आसान बना दिया है)।

CPPUnitLite एक सच्चे C ++ स्टाइल टेस्टिंग फ्रेमवर्क बनाने का प्रयास करता है, न कि Java एक जिसे C ++ में पोर्ट किया गया है। (मैं फेदर की वर्किंग से प्रभावी रूप से लिगेसी कोड बुक से पैराफ्रासिंग कर रहा हूं )। CPPUnitLite2 अधिक सुविधाओं और बग फिक्स के साथ एक और फिर से लिखना लगता है।

मैं भी सिर्फ UnitTest ++ भर में ठोकर खाई, जिसमें CPPUnitLite2 और कुछ अन्य ढांचे से सामान शामिल हैं।

Microsoft ने WinUnit जारी किया है ।

इसके अलावा चेकआउट कैच या डॉक्टेस्ट


2
Googletest बहुत बढ़ावा देने के समान है :: परीक्षण लेकिन VS में एकीकृत करने के लिए थोड़ा आसान
मार्टिन बेकेट

3
मुझे आश्चर्य है कि कैच का उल्लेख यहां नहीं किया गया है। इसके अलावा चेकआउट सिद्धांत - संकलन गति पर एक विशाल फोकस के साथ कैच का मेरा पुन: क्रियान्वयन
व्हाट्स

1
@onqtam को बहुत आश्चर्य नहीं होना चाहिए, यह प्रश्न / उत्तर 2008 से था! जोड़े गए लिंक का सुझाव दिया।
अर्कवार

24

विजुअल स्टूडियो 2008 के भीतर बिल्ट इन टेस्टिंग फ्रेमवर्क का उपयोग करके मानव रहित C ++ का परीक्षण करने का एक तरीका है । यदि आप C ++ / CLI का उपयोग करके C ++ टेस्ट प्रोजेक्ट बनाते हैं, तो आप किसी अप्रबंधित DLL पर कॉल कर सकते हैं। आपको कॉमन लैंग्वेज रनटाइम सपोर्ट को / clr से / clr: safe पर स्विच करना होगा यदि आप उस कोड को टेस्ट करना चाहते हैं जो अनवांटेड C ++ में लिखा गया था।

मुझे यहाँ अपने ब्लॉग पर स्टेप बाय स्टेप विवरण है: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/


1
यह आपके C ++ कोड पर कुछ प्रतिबंध लगाता है, मुझे कम से कम एक कोड आधार मिला है, जहां इसके हेडर को C ++ / CLI कोड में शामिल करने की कोशिश की गई थी, यह मूल्य की तुलना में अधिक परेशानी थी। C ++ / CLI का उपयोग करने का मेरे लिए बड़ा लाभ यह है कि आप mbUnit / NUnit / xUnit.Net में RowTest जैसी विशेषताओं के साथ फंकी पैरामीटरेटिड परीक्षण का उपयोग कर सकते हैं
Andy Dent

9

यहाँ Microsoft पर IIS URL रिवाइराइट मॉड्यूल का परीक्षण करने के लिए उपयोग किया गया तरीका है (यह कमांड-लाइन आधारित है, लेकिन इसके लिए भी काम करना चाहिए:)

  1. सुनिश्चित करें कि आपकी हेडर फ़ाइलें स्रोत कोड को cpp फ़ाइलों में ले जाने और यदि आवश्यक हो तो आगे की घोषणा का उपयोग करके उपयोग करने योग्य हैं।
  2. लाइब्रेरी के रूप में परीक्षण करने के लिए अपना कोड संकलित करें (.lib)
  3. सीएलआर समर्थन के साथ C ++ के रूप में अपनी यूनिटटेस्ट परियोजना बनाएं।
  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();
  }
};

इस दृष्टिकोण के साथ, लोगों को बहुत सी + + / सीएलआई सामान सीखने की जरूरत नहीं है, सभी वास्तविक परीक्षा सी ++ मूल में की जाएगी और टेस्टशिम वर्ग का उपयोग MSTest.exe को परीक्षण 'प्रकाशित' करने के लिए किया जाएगा (या इसे दिखाई देगा) )।

नए परीक्षणों को जोड़ने के लिए आप सिर्फ एक नया [TestMethod] शून्य NewTest () {:: NewTest ();} विधि और एक नया शून्य NewTest () मूल फ़ंक्शन घोषित करते हैं। कोई मैक्रोज़, कोई चाल नहीं, straighforward।

अब, हेडे फ़ाइल वैकल्पिक रूप से है, लेकिन इसका उपयोग C ++ मूल हस्ताक्षर (जैसे कि Stirng ^ के बजाय wchar_t *) के साथ एस्टर क्लास के तरीकों को उजागर करने के लिए किया जा सकता है, इसलिए आप इसे 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


6

व्यक्तिगत रूप से, मैं WinUnit को पसंद करता हूं क्योंकि इसके लिए मुझे अपने परीक्षणों के अलावा कुछ भी लिखने की आवश्यकता नहीं है (मैं एक परीक्षण के रूप में एक dd का निर्माण करता हूं, एक exe नहीं)। मैं सिर्फ एक परियोजना का निर्माण करता हूं, और अपने परीक्षण आउटपुट निर्देशिका को WinUnit.exe इंगित करता हूं और यह वह सब कुछ चलाता है जो इसे पाता है। आप यहां WinUnit प्रोजेक्ट डाउनलोड कर सकते हैं । (एमएसडीएन अब आपको पूरे मुद्दे को डाउनलोड करने की आवश्यकता है, लेख नहीं। WinUnit भीतर शामिल है।)


4

ढांचा VS9 के साथ शामिल है .नेट, लेकिन आप C ++ / CLI में परीक्षण लिखते हैं, तो जब तक आप कर रहे हैं आराम से कुछ नेट वाद सीखने, आप सबसे अधिक किसी भी सी ++ कोड का परीक्षण करने में सक्षम होना चाहिए कर सकते हैं।

boost.test और googletest काफी समान दिखते हैं, लेकिन थोड़े अलग उपयोगों के लिए अनुकूलित हैं। इन दोनों में एक द्विआधारी घटक है, इसलिए आपको परीक्षणों को संकलित करने और चलाने के लिए आपके समाधान में एक अतिरिक्त परियोजना की आवश्यकता होगी।

हमारे द्वारा उपयोग किया जाने वाला ढांचा CxxTest है , जो बहुत हल्का है; यह केवल हेडर है, और आपके हेडर (सूट CxxTest :: बेस, जो आपके सभी परीक्षण विधियों के नाम "परीक्षण" से शुरू होता है) से प्राप्त सूट जानकारी को परिमार्जन करने के लिए एक पर्ल (!) स्क्रिप्ट का उपयोग करता है। जाहिर है, इसके लिए जरूरी है कि आप पर्ल को एक स्रोत या किसी अन्य से प्राप्त करें , जो आपके बिल्ड पर्यावरण सेटअप में ओवरहेड जोड़ता है।


CxxTest पर्ल के बजाय अजगर का उपयोग कर सकते हैं
मार्टिन बेकेट

आपको अपने कोड द्वारा आवश्यक किसी भी DLL के बारे में सावधान रहने की आवश्यकता है - मुझे NUnit और mbUnit परीक्षण C ++ / CLI कोड के साथ समस्या है, DLL को लोड करने की कोशिश कर रहा है।
एंडी डेंट

2

मैं UnitTest ++ का उपयोग करता हूं

जब से मैंने इस पद को बनाया है तब से यह स्रोत SourceForge से github में चला गया है। उदाहरण के लिए ट्यूटोरियल अब अधिक अज्ञेयवादी है - किसी भी विन्यास या परियोजना में बिल्कुल भी स्थापित नहीं होता है।

मुझे संदेह है कि यह अभी भी विजुअल स्टूडियो 6 के लिए काम करेगा क्योंकि प्रोजेक्ट फाइलें अब सीएमके के माध्यम से बनाई गई हैं। यदि आपको अभी भी पुराने संस्करण के समर्थन की आवश्यकता है, तो आप SourceForge शाखा के तहत अंतिम उपलब्ध संस्करण प्राप्त कर सकते हैं ।


2

यहाँ जिन उपकरणों का उल्लेख किया गया है, वे सभी कमांड-लाइन उपकरण हैं। यदि आप एक अधिक एकीकृत समाधान की तलाश करते हैं, तो उपसर्ग स्टूडियो पर एक नज़र डालें , जो कि C / C ++ इकाई परीक्षण के लिए एक विज़ुअल स्टूडियो AddIn है। यह काफी हद तक TestDriven.Net के समान है, लेकिन .NET के बजाय (अप्रबंधित) C / C ++ के लिए है।


1

मैंने VS2005 और ग्रहण के साथ CppUnit का उपयोग किया है । विकी बहुत अच्छी तरह से है (खासकर यदि आप JUnit से परिचित हैं)।


1

मैं VS2008 के बारे में 100% निश्चित नहीं हूं, लेकिन मुझे पता है कि यूनिट टेस्टिंग फ्रेमवर्क जो Microsoft ने VS2005 में अपने टीम सूट के हिस्से के रूप में शिप किया था, केवल .NET के लिए था, C ++ के लिए नहीं

मैंने CppUnit का भी उपयोग किया है और यह ठीक था। NUnit / JUnit / के रूप में बहुत कुछ।

यदि आपने बढ़ावा दिया है, तो उनके पास एक इकाई परीक्षण पुस्तकालय भी है

बढ़ावा देने के पीछे के लोगों के पास कुछ गंभीर कोडिंग चॉप हैं, इसलिए मैं कहूंगा कि उनकी रूपरेखा बहुत अच्छी होनी चाहिए, लेकिन यह सबसे अधिक उपयोगकर्ता नहीं हो सकता है :-)


1

मुझे CxxTest समान कारणों से पसंद है। यह केवल हेडर फाइल है इसलिए किसी लिंकिंग की आवश्यकता नहीं है। आप पर्ल के साथ फंस नहीं रहे हैं क्योंकि एक पायथन धावक भी है। मैं जल्द ही Google लाइब्रेरी की समीक्षा करूंगा। बूस्ट सामान बहुत अधिक अन्य सामान में खींचता है।


1

विज़ुअल स्टूडियो 2008 के लिए यूनिट टेस्टर केवल .NET कोड के लिए है जहाँ तक मुझे पता है।

मैंने विजुअल स्टूडियो 2005 पर कैप्पनीट का इस्तेमाल किया और पाया कि यह बहुत अच्छा है।

जहाँ तक मुझे याद है, सेटअप अपेक्षाकृत दर्द रहित था। बस सुनिश्चित करें कि आपके परीक्षण परियोजनाओं में लिंकर (लिंकर → इनपुट → अतिरिक्त निर्भरता) में cppunitd.lib शामिल है।

फिर, #include <cppunit/extensions/HelperMacros.h>अपने हेडर में।

फिर आप अपने परीक्षण वर्ग को काम में लेने के लिए http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html में दिए गए चरणों का पालन कर सकते हैं ।


1

मैं Visual Studio के साथ Windows वातावरण में एक अप्रबंधित C ++ अनुप्रयोग के लिए इकाई परीक्षण को लागू करने के लिए पीड़ित था। तो मैं काबू पाने में कामयाब रहा और एक पोस्ट को चरणबद्ध तरीके से अप्रबंधित सी ++ एप्लिकेशन यूनिट परीक्षण के लिए मार्गदर्शन के रूप में लिखा। मुझे उम्मीद है कि यह आपकी मदद कर सकता है।

विजुअल स्टूडियो में मानव रहित C ++ के लिए यूनिट टेस्ट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.