У меня возникли проблемы с выяснением того, как настроить тестовую среду и использовать ее в Visual Studio 2008 для С++, предположительно, с помощью встроенного модуля тестирования.
Любые ссылки или руководства будут оценены.
У меня возникли проблемы с выяснением того, как настроить тестовую среду и использовать ее в Visual Studio 2008 для С++, предположительно, с помощью встроенного модуля тестирования.
Любые ссылки или руководства будут оценены.
Эта страница может помочь, она рассматривает довольно много С++ unit test фреймворков:
Отметьте CPPUnitLite или CPPUnitLite2.
CPPUnitLite был создан Майклом Персом, который первоначально портировал Java JUnit на С++ в качестве CPPUnit (CPPUnit пытается имитировать модель разработки JUnit), но на С++ отсутствуют функции Java (например, отражение), чтобы упростить ее использование).
CPPUnitLite пытается создать истинную среду тестирования стиля С++, а не Java, переносимую на С++. (Я пересказываю из Feather Эффективная работа с устаревшим кодом). CPPUnitLite2, похоже, является еще одним переписанием, с большим количеством функций и исправлений ошибок.
Я также просто наткнулся на UnitTest ++, который включает в себя материал из CPPUnitLite2 и некоторых других фреймворков.
Microsoft выпустила WinUnit.
Существует способ проверки неуправляемого С++ с использованием встроенной среды тестирования в Visual Studio 2008. Если вы создаете тестовый проект С++, используя С++/CLI, вы можете совершать вызовы в неуправляемую DLL. Вам нужно будет переключить поддержку Common Language Runtime в /clr из/clr: безопасно, если вы хотите протестировать код, написанный на неуправляемом С++.
У меня есть пошаговые подробности в моем блоге: 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();
}
};
При таком подходе людям не нужно слишком много изучать материалы С++/CLI, все реальные тесты будут выполнены в С++ native, а класс TestShim будет использоваться для публикации теста MSTest.exe(или сделать его видимым).
Для добавления новых тестов вы просто объявляете новый метод [TestMethod] void NewTest() {:: NewTest();} и новую функцию void NewTest(). Никаких макросов, никаких трюков, несправедливости.
Теперь файл heade является необязательным, но его можно использовать для раскрытия методов класса Assert с помощью собственных сигнатур С++ (например, wchar_t * вместо Stirng ^), так что вы можете поддерживать его близко к С++ и далеки от С++/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)
НТН
Лично я предпочитаю WinUnit, так как он не требует от меня пишите что угодно, кроме моих тестов (я строю .dll как тест, а не exe). Я просто создаю проект и указываю WinUnit.exe на свой тестовый выходной каталог, и он запускает все, что находит. Вы можете загрузить проект WinUnit здесь. (MSDN теперь требует, чтобы вы загрузили всю проблему, а не статью. WinUnit включен внутри.)
Рамка, включенная в VS9, -.NET, но вы можете писать тесты в С++/CLI, поэтому, если вам удобно изучать некоторые .NET-isms, вы должны проверить большинство С++-кода.
boost.test и googletest выглядят довольно похожими, но адаптированы для немного разных целей. Оба они имеют двоичный компонент, поэтому вам потребуется дополнительный проект в вашем решении для компиляции и запуска тестов.
Используемая нами структура CxxTest, которая намного легче; он содержит только заголовки и использует Perl (!) script для очистки информации набора тестов из ваших заголовков (наборы наследуются от CxxTest:: Base, все имена ваших тестовых методов начинаются с "теста" ). Очевидно, для этого требуется, чтобы вы получили Perl из один источник или другой, который добавляет дополнительные издержки в настройку среды сборки.
Я использую UnitTest ++.
За годы, прошедшие с того момента, как я сделал этот пост, источник перешел из SourceForge в github. Кроме того, пример учебника теперь более агностик - не входит в какую-либо конфигурацию или проект вообще не создан.
Я сомневаюсь, что он все равно будет работать для Visual Studio 6, поскольку файлы проекта теперь создаются с помощью CMake. Если вам все еще нужна поддержка более старой версии, вы можете получить последнюю доступную версию в разделе SourceForge.
Инструменты, которые были упомянуты здесь, - это все инструменты командной строки. Если вы ищете более интегрированное решение, посмотрите cfix studio, который является модульным тестированием Visual Studio AddIn для C/С++. Он очень похож на TestDriven.Net, но для (неуправляемого) C/С++, а не .NET.
Я использовал CppUnit с VS2005 и Eclipse. Вики очень тщательны (особенно если вы знакомы с JUnit).
Я не уверен на 100% о VS2008, но я знаю, что инфраструктура модульного тестирования, которую microsoft поставляла в VS2005 как часть своего Team Suite, была только для .NET, а не для С++
Я тоже использовал CppUnit, и все было в порядке. То же самое, что и NUnit/JUnit/so.
Если вы использовали 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, чтобы ваш тестовый класс работал.
Мне тоже нравится CxxTest по тем же причинам. Это заголовочный файл, поэтому привязка не требуется. Вы не застряли в Perl, так как есть и бегун Python. Скоро я просмотрю библиотеку google. Материал Boost тянет слишком много другого багажа.
Мне пришлось выполнять модульное тестирование для неуправляемого приложения С++ в среде Windows с помощью Visual Studio. Поэтому мне удалось преодолеть и написать сообщение как пошаговое руководство по неуправляемому тестированию модулей С++. Надеюсь, это может вам помочь.