Как настроить модульное тестирование для Visual Studio C ++

StackOverflow https://stackoverflow.com/questions/3150

Вопрос

У меня возникли проблемы с пониманием того, как настроить платформу тестирования и использовать ее в Visual Studio 2008 для C ++, предположительно, с помощью встроенного пакета модульного тестирования.

Будем признательны за любые ссылки или учебные пособия.

Это было полезно?

Решение

Эта страница может помочь, в нем рассматривается довольно много фреймворков модульного тестирования C ++:

  • CPP- блок
  • Повышение.Тест
  • CPP - элементлит
  • Наноблок
  • Единица измерения++
  • CxxТест

Проверьте CPP - элементлит или CPPUnitLite2.

CPP - элементлит был создан Майклом Фезерсом, который первоначально портировал Java JUnit на C ++ как CppUnit (CppUnit пытается имитировать модель разработки JUnit, но C ++ не хватает возможностей Java [напримеротражение], чтобы сделать его простым в использовании).

CPPUnitLite пытается создать настоящую платформу тестирования в стиле C ++, а не Java, портированную на C ++.(Я перефразирую цитату из книги Фезера Эффективная работа с устаревшим кодом книга). CPPUnitLite2 похоже, это еще одно переписывание, с большим количеством функций и исправлений ошибок.

Я также только что наткнулся на Единичный тест++ который включает в себя материалы из CPPUnitLite2 и некоторых других фреймворков.

Microsoft выпустила Модуль WinUnit.

Также оформляйте заказ Поймать или Доктест

Другие советы

Существует способ протестировать неуправляемый C ++, используя встроенную платформу тестирования в Visual Studio 2008.Если вы создаете тестовый проект на C ++, используя C ++ / CLI, вы можете затем выполнять вызовы неуправляемой библиотеки DLL.Вам нужно будет переключить поддержку Common Language Runtime на /clr из /clr:safe, если вы хотите протестировать код, написанный на неуправляемом C ++.

У меня есть пошаговая информация в моем блоге здесь: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

Вот подход, который я использую для тестирования модуля перезаписи URL IIS в Microsoft (он основан на командной строке, но должен работать и для VS):

  1. Убедитесь, что ваши заголовочные файлы пригодны для использования, переместив исходный код в cpp-файлы и при необходимости используя прямое объявление.
  2. Скомпилируйте ваш код для тестирования как библиотеку (.lib)
  3. Создайте свой самый простой проект на C ++ с поддержкой CLR.
  4. Включите ваши заголовочные файлы.
  5. Включите ваши .lib-файлы.
  6. Добавьте ссылку на Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Используйте действительно маленький класс для объявления вашего модульного теста и переходите от управляемого к C ++ / машинному коду следующим образом (могут быть опечатки):

Вот такой пример:

// 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 ++ native, а класс TestShim будет использоваться для "публикации" теста в MSTest.exe (или сделайте это видимым).

Для добавления новых тестов вы просто объявляете новый метод [TestMethod] void NewTest(){::NewTest();} и новую встроенную функцию void NewTest().Никаких макросов, никаких трюков, прямолинейно.

Файл heade необязателен, но его можно использовать для предоставления методов класса 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 ++.

повышение.тест и гуглтест выглядят довольно похоже, но адаптированы для несколько иных целей.Оба они имеют двоичный компонент, поэтому вам понадобится дополнительный проект в вашем решении для компиляции и запуска тестов.

Фреймворк, который мы используем, является CxxТест, который намного легче;это только заголовки, и он использует Perl (!) скрипт для извлечения информации о наборе тестов из ваших заголовков (наборы наследуются от CxxTest::Base, имена всех ваших методов тестирования начинаются с "test").Очевидно, что для этого требуется, чтобы вы получили Perl из один источник или другой, что увеличивает накладные расходы на настройку среды сборки.

Я использую Единичный тест++.

За годы, прошедшие с тех пор, как я написал этот пост, исходный код переместился из SourceForge в github.Кроме того, примерный учебник теперь он более независим - вообще не входит в какие-либо конфигурации или настройки проекта.

Я сомневаюсь, что это все еще будет работать для Visual Studio 6, поскольку файлы проекта теперь создаются с помощью CMake.Если вам все еще нужна поддержка более старой версии, вы можете получить последнюю доступную версию в разделе Кузница- источник филиал.

Все инструменты, которые были упомянуты здесь, являются инструментами командной строки.Если вы ищете более интегрированное решение, взгляните на студия cfix, который является надстройкой Visual Studio для модульного тестирования C / C ++.Он очень похож на TestDriven.Net, но для (неуправляемого) C / C ++, а не .NET.

Я использовал CPP- блок с VS2005 и Eclipse.Вики очень тщательна (особенно если вы знакомы с JUnit).

Я не уверен на 100% насчет VS2008, но я знаю, что платформа модульного тестирования, поставляемая Microsoft в VS2005 как часть их Team Suite, была предназначена только для .NET, а не для C ++

Я также использовал CppUnit, и все было в порядке.Почти то же самое, что NUnit / JUnit / и так далее.

Если вы использовали boost, они также есть библиотека модульного тестирования

У ребят, стоящих за boost, есть кое-что серьезный отбивные для кодирования, поэтому я бы сказал, что их фреймворк должен быть довольно хорошим, но он может быть не самым удобным для пользователя :-)

Мне также нравится CxxTest по тем же причинам.Это только заголовочный файл, поэтому никаких ссылок не требуется.Вы не зациклены на Perl, так как есть еще и Python runner.Скоро я ознакомлюсь с библиотекой Google.Бустеры тянут за собой слишком много другого багажа.

Модульный тестер для Visual Studio 2008 предназначен только для .ЧИСТЫЙ код, насколько я знаю.

Я использовал CppUnit в Visual Studio 2005 и обнаружил, что он довольно хорош.

Насколько я помню, установка прошла относительно безболезненно.Просто убедитесь, что в ваших тестовых проектах компоновщик (Linker → Input → Дополнительные зависимости) включает cppunitd.lib.

Тогда, #include <cppunit/extensions/HelperMacros.h> в вашем заголовке.

Затем вы можете выполнить действия, описанные в разделе http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html чтобы заставить ваш тестовый класс работать.

Я страдал от реализации модульного тестирования для неуправляемого приложения на C ++ в среде Windows с Visual Studio.Итак, мне удалось преодолеть это и я написал пост в качестве пошагового руководства по модульному тестированию неуправляемых приложений на C ++.Я надеюсь, что это поможет вам.

Модульный тест для неуправляемого C ++ в Visual Studio

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top