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

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

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

Google выпускает C ++ Test Framework, который очень похож на фреймворки xUnit. http://code.google.com/p/googletest/
popopome 20.08.2008 18:51:16
Какие рамки вы в конечном итоге использовали?
Joakim Karlsson 4.11.2009 08:30:57
на самом деле я до сих пор не использовал ни одного из них. Я решил, что то, над чем я работаю, не было наиболее эффективного использования времени.
DShook 5.11.2009 19:01:28
12 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

CPPUnitLite был создан Майклом Фезерсом (Michael Feathers), который первоначально портировал JUnit Java на C ++ как CPPUnit (CPPUnit пытается имитировать модель разработки JUnit - но в C ++ отсутствуют функции Java [например, отражение], чтобы сделать его простым в использовании).

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

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

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

Также оформить заказ Catch или Doctest

56
17.10.2016 18:24:53
Googletest очень похож на boost :: test, но его немного легче интегрировать в VS
Martin Beckett 6.10.2010 21:29:13
Я удивлен, что Поймать здесь не упоминается. Также ознакомьтесь с doctest - моим повторным воплощением Catch с огромным акцентом на скорость компиляции - ознакомьтесь с FAQ, чтобы увидеть, чем они отличаются
onqtam 10.10.2016 20:14:56
@onqtam не удивляйтесь, этот вопрос / ответ был с 2008 года! Добавил вам предложенные ссылки.
Aardvark 17.10.2016 18:28:47

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

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

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

2
5.08.2016 06:18:37

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

1
11.08.2008 23:13:28

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

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

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

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

1
11.08.2008 23:45:25

Фреймворком, включенным в VS9, является .NET, но вы можете писать тесты на C ++ / CLI, поэтому, пока вы знакомы с некоторыми измами .NET, вы сможете тестировать практически любой код C ++.

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

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

4
14.08.2008 14:17:39
CxxTest может использовать Python вместо Perl
Martin Beckett 8.06.2009 13:38:09
Вы также должны быть осторожны с любыми DLL-библиотеками, требуемыми вашим кодом - у меня были проблемы с NUnit и mbUnit, которые тестировали код C ++ / CLI, пытаясь загрузить DLL.
Andy Dent 26.07.2010 04:48:35

Насколько мне известно, модульный тестер для 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, чтобы ваш тестовый класс работал.

1
22.05.2017 00:04:45

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

1
27.08.2008 18:15:50

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

6
15.09.2008 16:33:51

Существует способ тестирования неуправляемого 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/

24
4.12.2009 03:57:32
Это накладывает определенные ограничения на ваш код C ++, у меня есть по крайней мере одна база кода, где попытка включить его заголовки в код C ++ / CLI была более трудной, чем она того стоила. Большим преимуществом использования C ++ / CLI для меня является то, что вы можете использовать фанки параметризованного тестирования с такими атрибутами, как RowTest, в mbUnit / NUnit / xUnit.Net
Andy Dent 24.08.2010 02:17:59

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

2
22.05.2017 00:05:42

Вот подход, который я использую для тестирования модуля перезаписи URL 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] 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)

НТН

9
1.12.2009 21:56:06

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

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

1
22.05.2017 00:07:17