У меня возникли проблемы , выяснить , как получить основы тестирования настроить и использовать в Visual Studio 2008 для C++
предположительно с встроенным блоком тестирования пакета.
Любые ссылки или учебные пособия будут оценены.
У меня возникли проблемы , выяснить , как получить основы тестирования настроить и использовать в Visual Studio 2008 для C++
предположительно с встроенным блоком тестирования пакета.
Любые ссылки или учебные пособия будут оценены.
Ответы:
Эта страница может помочь, она рассматривает довольно много фреймворков модульного тестирования C ++:
Проверьте CPPUnitLite или CPPUnitLite2 .
CPPUnitLite был создан Майклом Фезерсом , который изначально портировал JUnit из Java на C ++ как CPPUnit (CPPUnit пытается имитировать модель разработки JUnit, но в C ++ отсутствуют функции Java [например, отражение], чтобы упростить его использование).
CPPUnitLite пытается создать настоящую среду тестирования в стиле C ++, а не платформу Java, перенесенную на C ++. (Я перефразирую книгу Фезера « Эффективная работа с устаревшим кодом» ). CPPUnitLite2 кажется еще одним переписанным с большим количеством функций и исправлений ошибок.
Я также только что наткнулся на UnitTest ++, который включает в себя материал из CPPUnitLite2 и некоторых других фреймворков.
Microsoft выпустила WinUnit .
Есть способ протестировать неуправляемый C ++ с помощью встроенной среды тестирования в Visual Studio 2008 . Если вы создаете тестовый проект C ++ с помощью C ++ / CLI, вы можете затем выполнять вызовы неуправляемой библиотеки DLL. Вам придется переключить поддержку Common Language Runtime с / clr: safe на / clr, если вы хотите протестировать код, написанный на неуправляемом C ++.
У меня есть пошаговая информация в моем блоге здесь: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Вот подход, который я использую для тестирования модуля IIS URL Rewrite в 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] void NewTest () {:: NewTest ();} и новую нативную функцию 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 studio , который представляет собой надстройку Visual Studio для модульного тестирования C / C ++. Он очень похож на TestDriven.Net, но для (неуправляемого) C / C ++, а не для .NET.
Я не уверен на 100% в VS2008, но я знаю, что фреймворк модульного тестирования, который Microsoft поставлял в VS2005 как часть своего Team Suite, был только для .NET, а не C ++
Я также использовал CppUnit, и все было хорошо. Во многом то же самое, что и NUnit / JUnit / и так далее.
Если вы использовали boost, у них также есть библиотека модульного тестирования
У ребят, стоящих за boost, есть серьезные проблемы с кодированием, поэтому я бы сказал, что их структура должна быть довольно хорошей, но она может быть не самой удобной для пользователя :-)
Насколько мне известно, модульный тестер для Visual Studio 2008 предназначен только для кода .NET.
Я использовал CppUnit в Visual Studio 2005 и обнаружил, что он неплохой.
Насколько я помню, настройка прошла относительно безболезненно. Просто убедитесь, что в ваших тестовых проектах компоновщик (Linker → Input → Additional Dependencies) включает cppunitd.lib.
Потом #include <cppunit/extensions/HelperMacros.h>
в шапке.
Затем вы можете выполнить шаги, описанные в http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html, чтобы ваш тестовый класс заработал.
Я мучился с реализацией модульного тестирования неуправляемого приложения C ++ в среде Windows с Visual Studio. Так что мне удалось преодолеть и написать пост в качестве пошагового руководства по модульному тестированию неуправляемых приложений C ++. Надеюсь, это поможет вам.