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

голоса
87

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

Любые ссылки или учебники будут оценены.

Задан 06/08/2008 в 08:57
источник пользователем
На других языках...                            


12 ответов

голоса
55

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

  • CppUnit
  • Boost.Test
  • CppUnitLite
  • NanoCppUnit
  • Unit ++
  • CxxTest

Проверьте CPPUnitLite или CPPUnitLite2 .

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

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

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

Microsoft выпустила WinUnit .

Также проверка Поймайте или Doctest

Ответил 30/08/2008 в 14:51
источник пользователем

голоса
24

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

Я шаг за шагом детали на моем блоге здесь: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

Ответил 05/05/2009 в 14:54
источник пользователем

голоса
9

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

  1. Убедитесь, что файлы заголовков являются расходным путем перемещения исходного кода в CPP файлы и с использованием прямого заявления в случае необходимости.
  2. Составьте свой код, чтобы проверить, как библиотеки (.lib)
  3. Создайте свой проект UnitTest как 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 ++ родной и класс TestShim будет использоваться для «опубликовать» тест на MSTest.exe (или сделать его видимым ).

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

Теперь файл 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)

НТН

Ответил 01/12/2009 в 22:56
источник пользователем

голоса
6

Лично я предпочитаю WinUnit , поскольку она не требует от меня написать что - нибудь для моих тестов , кроме (я построить .dll как тест, а не ЕХ). Я просто построить проект, и указать WinUnit.exe на мой тестовый выходной каталог и работает все это находит. Вы можете загрузить проект WinUnit здесь . (MSDN теперь требует вам скачать весь выпуск, а не статья. WinUnit входит в.)

Ответил 15/09/2008 в 17:33
источник пользователем

голоса
4

Рамки в комплекте с VS9 является .NET, но вы можете писать тесты в C ++ / CLI, так что до тех пор , пока вы комфортно обучения некоторые .NET измы, вы должны быть в состоянии проверить большинство любого кода C ++.

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

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

Ответил 14/08/2008 в 15:17
источник пользователем

голоса
2

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

Ответил 24/06/2009 в 07:21
источник пользователем

голоса
2

Я использую UnitTest ++ .

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

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

Ответил 06/08/2008 в 09:28
источник пользователем

голоса
1

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

Юнит-тестирование для неуправляемого C ++ в Visual Studio

Ответил 07/12/2012 в 09:32
источник пользователем

голоса
1

Мне нравится CxxTest, а также по тем же причинам. Это файл только заголовок так не требуется сшивание. Вы не застряли с Perl как есть Python бегун, а также. Я буду рассматривать библиотеку Google в ближайшее время. Подталкивания материал тянет слишком много другого багажа.

Ответил 27/08/2008 в 19:15
источник пользователем

голоса
1

Блок тестер для Visual Studio 2008 только для кода .NET, насколько я знаю.

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

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

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

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

Ответил 19/08/2008 в 18:01
источник пользователем

голоса
1

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

Я использовал CppUnit также, и это было хорошо. То же самое, как NUnit / JUnit / так далее.

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

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

Ответил 12/08/2008 в 00:45
источник пользователем

голоса
1

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

Ответил 12/08/2008 в 00:13
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more