У мене виникли проблеми , з'ясувати , як отримати основи тестування налаштувати і використовувати в Visual Studio 2008 для C++
імовірно з вбудованим блоком тестування пакету.
Будь-які посилання чи підручники будуть вдячні.
У мене виникли проблеми , з'ясувати , як отримати основи тестування налаштувати і використовувати в Visual Studio 2008 для C++
імовірно з вбудованим блоком тестування пакету.
Будь-які посилання чи підручники будуть вдячні.
Відповіді:
Ця сторінка може допомогти, вона оглядає досить багато тестових рамок одиниць C ++:
Ознайомтеся з CPPUnitLite або CPPUnitLite2 .
CPPUnitLite був створений Майклом Feathers, який спочатку переніс JUnit Java на C ++ як CPPUnit (CPPUnit намагається імітувати модель розробки JUnit - однак у C ++ бракує можливостей Java [напр., Рефлексія], щоб зробити їх легким у використанні).
CPPUnitLite намагається створити справжню структуру тестування у стилі C ++, а не Java, яку переносить на C ++. (Я перефразую з книги « Ефективно працює з книгою Legacy Code» Feather ). CPPUnitLite2, здається, є черговим перезаписом, з більшою кількістю функцій та виправленнями помилок.
Я також просто натрапив на UnitTest ++, який включає речі з CPPUnitLite2 та деякі інші рамки.
Microsoft випустила WinUnit .
Існує спосіб протестувати керований C ++, використовуючи вбудований тестовий фреймворк у Visual Studio 2008 . Якщо ви створюєте тестовий проект C ++, використовуючи C ++ / CLI, ви зможете здійснювати дзвінки в керовану DLL. Вам потрібно буде переключити підтримку загальної мови виконання на / clr з / clr: safe, якщо ви хочете перевірити код, який був записаний у керованому C ++.
Я маю покрокові деталі свого блогу тут: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Ось підхід, який я використовую для тестування модуля перезапису URL-адреси IIS в Microsoft (він заснований на командному рядку, але він повинен працювати і для VS):
Ось приклад:
// 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 ();} та нову основну функцію new void NewTest (). Ніяких макросів, ніяких хитрощів, прямо.
Тепер, головний файл необов’язково, але його можна використовувати для викриття методів класу Assert з нативними підписами 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
Особисто я віддаю перевагу WinUnit, оскільки це не вимагає від мене нічого писати, крім моїх тестів (я будую .dll як тест, а не exe). Я просто будую проект і вказую WinUnit.exe на свій тестовий каталог, і він запускає все, що знайде. Ви можете завантажити проект WinUnit тут . (MSDN тепер вимагає завантажити весь випуск, а не статтю. У програмі WinUnit включено.)
Рамка, що входить до VS9, - це .NET, але ви можете писати тести на C ++ / CLI, тому, поки вам комфортно вивчати деякі .NET-ізми, ви повинні мати можливість протестувати більшість будь-яких кодів C ++.
boost.test та googletest виглядають досить схожими, але пристосовані для дещо іншого використання. Обидва вони мають бінарний компонент, тому для складання та запуску тестів вам знадобиться додатковий проект у вашому рішенні.
Рамка , яку ми використовуємо, - це CxxTest , яка набагато легша; це лише заголовки, і він використовує скрипт Perl (!) для того, щоб викреслити інформацію про тестовий набір із ваших заголовків (пакети, успадковані від CxxTest :: Base, всі назви ваших методів тестування починаються з "test"). Очевидно, що для цього потрібно отримати Perl від того чи іншого джерела , що додасть накладні витрати на налаштування середовища побудови.
Я використовую UnitTest ++ .
У роки, коли я зайняв цю посаду, джерело перейшло з SourceForge в github. Також приклад навчального посібника тепер є більш агностичним - взагалі не входить у будь-яку конфігурацію чи проект.
Сумніваюсь, він все ще працюватиме для Visual Studio 6, оскільки файли проекту тепер створюються через CMake. Якщо вам все ще потрібна підтримка старішої версії, ви можете отримати останню доступну версію у відділенні SourceForge .
Згадані тут інструменти - це всі інструменти командного рядка. Якщо ви шукаєте більш інтегроване рішення, перегляньте студію cfix , яка є Visual Studio AddIn для тестування одиниць на C / C ++. Він досить схожий на TestDriven.Net, але для (некерованого) C / C ++, а не .NET.
Я не впевнений на 100% щодо VS2008, але знаю, що рамки тестування модулів, які мікрософт поставляв у VS2005 у складі їх пакету Team, були лише для .NET, а не для C ++
Я також використовував CppUnit, і все було добре. Настільки ж, як NUnit / JUnit / так далі.
Якщо ви використовували boost, вони також мають бібліотеку тестування одиниць
Хлопці, що стоять за імпульсом, мають кілька серйозних відсіків кодування, тому я б сказав, що їх рамки повинні бути дуже гарними, але це може бути не найзручнішим користувачем :-)
Наскільки мені відомо, тестер приладів для Visual Studio 2008 призначений тільки для коду .NET.
Я використовував CppUnit на Visual Studio 2005 і виявив, що це дуже добре.
Наскільки я пам’ятаю, налаштування була відносно безболісною. Просто переконайтеся, що у ваших тестових проектах лінкер (Linker → Input → Additional Dependunities) включає cppunitd.lib.
Тоді, #include <cppunit/extensions/HelperMacros.h>
у своєму заголовку.
Потім ви можете виконати кроки в http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html, щоб ваш тестовий клас працював.
Мені страждало впроваджувати тестування модулів для керованого додатка C ++ у середовищі Windows із Visual Studio. Тож мені вдалося подолати і написав публікацію як покрокове керівництво до тестування некерованих програм C ++. Сподіваюся, це може вам допомогти.