विजुअल स्टूडियो सी ++ के लिए यूनिट परीक्षण कैसे सेट करें

मुझे यह पता लगाने में परेशानी हो रही है कि परीक्षण फ्रेमवर्क कैसे स्थापित किया जाए और दृश्य स्टूडियो 2008 में सी ++ के लिए संभवतः अंतर्निहित इकाई परीक्षण सूट के साथ प्रयोग योग्य हो।

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

0
जोड़ा संपादित
विचारों: 1
असल में मैंने अभी भी उनमें से किसी का भी उपयोग नहीं किया है। मैंने फैसला किया कि मैं यूनिट परीक्षणों पर जो काम कर रहा था वह समय का सबसे प्रभावी उपयोग नहीं था।
जोड़ा लेखक DShook, स्रोत
Google सी ++ टेस्ट फ्रेमवर्क जारी करता है जो xUnit ढांचे के साथ बहुत समान है। http://code.google.com/p/googletest/
जोड़ा लेखक popopome, स्रोत
आप किस ढांचे का उपयोग कर खत्म हो गए?
जोड़ा लेखक Joakim Karlsson, स्रोत

11 उत्तर

मैं वीएस -2008 के बारे में 100% निश्चित नहीं हूं, लेकिन मुझे पता है कि यूनिट टेस्टिंग फ्रेमवर्क जो कि उनके टीम सूट के हिस्से के रूप में वीएस2005 में भेजा गया माइक्रोसॉफ्ट केवल .NET के लिए था, सी ++ नहीं

मैंने सीपीपीयूनीट भी इस्तेमाल किया है और यह ठीक था। NUnit / JUnit / इतने पर उतना ही।

If you've used boost, they also have a unit testing library

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

0
जोड़ा

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

सालों से मैंने इस पोस्ट को बनाया है, स्रोत सोर्सफोर्ज से जिथब में स्थानांतरित हो गया है। इसके अलावा उदाहरण ट्यूटोरियल अब और अधिक अज्ञेयवादी है - किसी भी कॉन्फ़िगरेशन या प्रोजेक्ट में बिल्कुल भी स्थापित नहीं होता है।

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

0
जोड़ा

There is a way to test unmanaged C++ using the built in testing framework within Visual Studio 2008. If you create a C++ Test Project, using C++/CLI, you can then make calls to an unmanaged DLL. You will have to switch the Common Language Runtime support to /clr from /clr:safe if you want to test code that was written in unmanaged C++.

I have step by step details on my blog here: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

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

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

अप्रबंधित सी ++ के लिए यूनिट परीक्षण विजुअल स्टूडियो में

0
जोड़ा

The unit tester for Visual Studio 2008 is only for .NET code as far as I know.

I used CppUnit on Visual Studio 2005 and found it to be pretty good.

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

Then, #include in your header.

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

0
जोड़ा

This page may help, it reviews quite a few C++ unit test frameworks:

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

CPPUnitLite या देखें CPPUnitLite2

CPPUnitLite was created by Michael Feathers, who originally ported Java's JUnit to C++ as CPPUnit (CPPUnit tries mimic the development model of JUnit - but C++ lacks Java's features [e.g. reflection] to make it easy to use).

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

मैं बस UnitTest ++ जिसमें सीपीपीयूनीटलाइट 2 और कुछ अन्य ढांचे से सामान शामिल है।

माइक्रोसॉफ्ट ने WinUnit जारी किया है।

Also checkout Catch or Doctest

0
जोड़ा
मुझे आश्चर्य है कि कैच का उल्लेख यहां नहीं किया गया है। इसके अलावा चेकआउट doctest - संकलन गति पर एक विशाल फोकस के साथ कैच का मेरा पुनर्मूल्यांकन - चेकआउट FAQ से देखें कि दोनों के बीच क्या अंतर है
जोड़ा लेखक onqtam, स्रोत
@onqtam बहुत आश्चर्यचकित नहीं है, यह सवाल / उत्तर 2008 से था! आपको सुझाए गए लिंक जोड़ा गया।
जोड़ा लेखक Aardvark, स्रोत
Googletest boost :: test के समान ही है लेकिन वीएस में एकीकृत करने के लिए थोड़ा आसान है
जोड़ा लेखक Martin Beckett, स्रोत
जोड़ा लेखक inazaruk, स्रोत

वीएस 9 है .NET के साथ ढांचा शामिल है, लेकिन आप सी ++ / सीएलआई में परीक्षण लिख सकते हैं, इसलिए जब तक आप कुछ .NET आइसम्स सीखने में सहज महसूस कर रहे हों, तो आपको किसी भी सी ++ कोड का परीक्षण करने में सक्षम होना चाहिए ।

boost.test and googletest look to be fairly similar, but adapted for slightly different uses. Both of these have a binary component, so you'll need an extra project in your solution to compile and run the tests.

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

0
जोड़ा
आपको अपने कोड द्वारा आवश्यक किसी भी डीएलएल के बारे में सावधान रहने की भी आवश्यकता है - मुझे डीएनएल लोड होने की कोशिश कर, एनयूएनआईटी और एमबीयूनीट परीक्षण सी ++ / सीएलआई कोड के साथ समस्याएं आई हैं।
जोड़ा लेखक Andy Dent, स्रोत
CxxTest perl के बजाय अजगर का उपयोग कर सकते हैं
जोड़ा लेखक Martin Beckett, स्रोत

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

0
जोड़ा
ध्यान दें कि WinUnit तब से कोडप्लेक्स में चला गया है winunit.codeplex.com
जोड़ा लेखक Andy Dent, स्रोत

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

0
जोड़ा

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

0
जोड़ा

माइक्रोसॉफ्ट में आईआईएस यूआरएल रिवाइट मॉड्यूल का परीक्षण करने के लिए मैं जिस दृष्टिकोण का उपयोग करता हूं, वह है (यह कमांड लाइन आधारित है, लेकिन वीएस के लिए भी काम करना चाहिए):

  1. सुनिश्चित करें कि आपकी हेडर फाइलें स्रोत कोड को cpp फ़ाइलों में ले जाकर उपभोग योग्य हैं और यदि आवश्यक हो तो आगे की घोषणा का उपयोग कर।
  2. लाइब्रेरी (.lib)
  3. के रूप में परीक्षण करने के लिए अपने कोड को संकलित करें
  4. सीएलआर समर्थन के साथ अपनी यूनिटटेस्ट परियोजना को सी ++ के रूप में बनाएं।
  5. अपनी हेडर फाइलें शामिल करें।
  6. अपनी .lib फ़ाइलों को शामिल करें।
  7. Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  8. में एक संदर्भ जोड़ें
  9. अपने यूनिट टेस्ट को घोषित करने के लिए वास्तव में छोटी कक्षा का उपयोग करें और प्रबंधित से सी ++ / मूल कोड से इस तरह कूदें (टाइपो हो सकता है):

यहाँ एक उदाहरण है:

// 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] शून्य न्यूटेस्ट() {:: न्यूटेस्ट ();} विधि और एक नया शून्य न्यूटेस्ट() देशी फ़ंक्शन घोषित करें। कोई मैक्रोज़, कोई चाल, straighforward।

अब, हेड फ़ाइल वैकल्पिक रूप से है, लेकिन इसका उपयोग सी ++ देशी हस्ताक्षर (उदाहरण के लिए Wir_t * के बजाय Wchar_t *) के साथ आर्ट क्लास के तरीकों का पर्दाफाश करने के लिए किया जा सकता है, ताकि आप इसे सी ++ के करीब रख सकें और सी ++ / सीएलआई से दूर रख सकें :

यहाँ एक उदाहरण है:

// 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
    static void AreEqual(T expected, T actual) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
    }

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

HTH

0
जोड़ा