Como configurar o teste de unidade do Visual Studio C ++

votos
87

Estou tendo dificuldade para descobrir como obter o framework de testes configurado e utilizável no Visual Studio 2008 para C ++, presumivelmente, com a suíte de testes de unidade embutido.

Todos os links ou tutoriais seria apreciada.

Publicado 06/08/2008 em 08:57
fonte usuário
Em outras línguas...                            


12 respostas

votos
55

Esta página pode ajudar, analisa algumas ++ estruturas de teste de unidade C:

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

Confira CPPUnitLite ou CPPUnitLite2 .

CPPUnitLite foi criado por penas Michael, que originalmente portado JUnit do Java para C ++ como CppUnit (tentativas CppUnit imitar o modelo de desenvolvimento do JUnit - mas C ++ carece de recursos do Java [eg reflexão] para torná-lo fácil de usar).

CPPUnitLite tenta fazer um verdadeiro C ++ - framework de testes estilo, não um Java um portado para C ++. (Estou parafraseando da pena de trabalhar efetivamente com Legacy Code livro). CPPUnitLite2 parece ser outra reescrita, com mais recursos e correções de bugs.

Eu também só tropeçou em toda UnitTest ++ que inclui o material de CPPUnitLite2 e algum outro quadro.

A Microsoft lançou WinUnit .

Também check-out captura ou doctest

Respondeu 30/08/2008 em 14:51
fonte usuário

votos
24

Existe uma maneira de testar não gerenciado C ++ usando o construído em estrutura de teste dentro do Visual Studio 2008 . Se você criar um C ++ Projeto de teste, usando C ++ / CLI, você pode então fazer chamadas para uma DLL não gerenciada. Você vai ter que mudar o suporte a Common Language Runtime para / clr de / clr: safe se você quiser testar o código que foi escrito em C ++ não gerenciado.

Eu tenho detalhes passo a passo no meu blog aqui: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

Respondeu 05/05/2009 em 14:54
fonte usuário

votos
9

Aqui é a abordagem que eu uso para testar o módulo URL IIS Rewrite a Microsoft (é de linha de comando com base, mas deve funcionar para VS também):

  1. Certifique-se de seus arquivos de cabeçalho são consumíveis movendo código fonte para CPP arquivos e usando a frente declaração, se necessário.
  2. Compilar o código para testar como biblioteca (.lib)
  3. Crie seu projeto UnitTest como C ++ com suporte CLR.
  4. Incluir seus arquivos de cabeçalho.
  5. Incluir seus arquivos .lib.
  6. Adicione uma referência para Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Use um realmente pequena classe para declarar seu teste de unidade e saltar de conseguiu código C ++ / nativo como este (pode ter erros de digitação):

Aqui está um exemplo:

// 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();
  }
};

Com esta abordagem, as pessoas não tem que aprender muito C ++ / CLI coisas, todo o verdadeiro teste será feito em C ++ nativa ea classe TestShim será usado para 'publicar' o teste para MSTest.exe (ou torná-lo visível ).

Para adicionar novos testes que você acabou de declarar um novo [TestMethod] vazio NewTest () {:: NewTest ();} método e uma nova função nativa vazio NewTest (). Não macros, sem truques, straighforward.

Agora, o arquivo heade é opcionalmente, mas ele pode ser usado para expor os métodos de classe Assert com assinaturas C ++ nativo (por exemplo, wchar_t * em vez de Stirng ^), para que ele possa você pode mantê-la perto de C ++ e longe de C ++ / CLI :

Aqui está um exemplo:

// 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

Respondeu 01/12/2009 em 22:56
fonte usuário

votos
6

Pessoalmente, eu prefiro WinUnit uma vez que não me obrigar a escrever qualquer coisa, exceto para os meus testes (I construir uma .dll como o teste, não um exe). Eu só construir um projeto e apontar WinUnit.exe para o meu diretório de saída de teste e funciona tudo o que encontra. Você pode baixar o projeto WinUnit aqui . (MSDN agora requer que você baixar todo o problema, não o artigo. WinUnit está incluído.)

Respondeu 15/09/2008 em 17:33
fonte usuário

votos
4

O quadro incluído com VS9 é .NET, mas você pode escrever testes em C ++ / CLI, por isso, enquanto você está confortável aprender algumas ismos NET, você deve ser capaz de testar a maioria qualquer código C ++.

boost.test e googletest olhar para ser bastante semelhantes, mas adaptada para ligeiramente diferentes usos. Ambos têm um componente binário, então você precisará de um projeto extra em sua solução para compilar e executar os testes.

O quadro que usamos é CxxTest , que é muito mais leve; é apenas cabeçalhos, e usa um script Perl (!) para raspar informações conjunto de testes de seus cabeçalhos (suites herdar de CxxTest :: Base, todos os nomes de seus métodos de ensaio começar com 'test'). Obviamente, isso exige que você obtenha Perl de uma fonte ou de outra , o que adiciona uma sobrecarga para a sua configuração de ambiente de compilação.

Respondeu 14/08/2008 em 15:17
fonte usuário

votos
2

As ferramentas que foram mencionados aqui são todas as ferramentas de linha de comando. Se você procurar uma solução mais integrada, dê uma olhada no estúdio cfix , que é um Visual Studio suplemento para / C ++ teste de unidade C. É bastante semelhante ao TestDriven.Net, mas para (não gerido) C / C ++, em vez de NET.

Respondeu 24/06/2009 em 07:21
fonte usuário

votos
2

Eu uso UnitTest ++ .

Nos anos desde que fiz este post a fonte passou de SourceForge para github. Também o exemplo tutorial é agora mais agnóstico - não entra em qualquer configuração ou projeto criado em tudo.

Eu duvido que ele ainda vai trabalhar para Visual Studio 6, como os arquivos de projeto agora são criados via CMake. Se você ainda precisa do apoio versão mais antiga você pode obter a última versão disponível sob o SourceForge ramo.

Respondeu 06/08/2008 em 09:28
fonte usuário

votos
1

Eu estava sofrendo de implementar testes de unidade para uma aplicação C ++ não gerenciado em um ambiente Windows com o Visual Studio. Então eu consegui superar e escreveu um post como uma orientação passo-a-passo para C ++ testes unitários aplicativo não gerenciado. Espero que podem ajudá-lo.

teste de unidade para ++ não gerenciado C no Visual Studio

Respondeu 07/12/2012 em 09:32
fonte usuário

votos
1

Eu gosto da CxxTest bem, pelas mesmas razões. É um arquivo de cabeçalho somente assim sem ligação necessária. Você não está preso com Perl como há um corredor Python também. I irá rever a biblioteca do Google em breve. O material impulso puxa muita outra bagagem.

Respondeu 27/08/2008 em 19:15
fonte usuário

votos
1

O testador unidade para o Visual Studio 2008 é apenas para o código .NET, tanto quanto eu sei.

Eu costumava CppUnit no Visual Studio 2005 e achei que ser muito bom.

Tanto quanto me lembro, a instalação foi relativamente indolor. Apenas certifique-se de que em seu teste projeta o vinculador (Linker → Entrada → Dependências adicionais) inclui cppunitd.lib.

Então, #include <cppunit/extensions/HelperMacros.h>em seu cabeçalho.

Você pode, em seguida, siga os passos no http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html para obter o seu trabalho classe de teste.

Respondeu 19/08/2008 em 18:01
fonte usuário

votos
1

Eu não estou 100% de certeza sobre VS2008, mas eu sei que o quadro Teste de unidade que a Microsoft lançou em VS2005 como parte de sua Team Suite era apenas para .NET, não C ++

Eu usei CppUnit também e foi bem. Da mesma forma como NUnit / JUnit / assim por diante.

Se você já usou impulso, eles também têm uma biblioteca de teste de unidade

Os caras por trás impulso ter algumas graves costeletas de codificação, então eu diria que seu quadro deve ser muito bom, mas pode não ser o :-) mais amigável

Respondeu 12/08/2008 em 00:45
fonte usuário

votos
1

Eu usei CppUnit com VS2005 e Eclipse. O wiki é muito completo (especialmente se você estiver familiarizado com JUnit).

Respondeu 12/08/2008 em 00:13
fonte usuário

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