Estou tendo problemas para descobrir como configurar e usar a estrutura de teste no Visual Studio 2008 para, C++
presumivelmente, com o pacote de teste de unidade integrado.
Quaisquer links ou tutoriais seriam apreciados.
Estou tendo problemas para descobrir como configurar e usar a estrutura de teste no Visual Studio 2008 para, C++
presumivelmente, com o pacote de teste de unidade integrado.
Quaisquer links ou tutoriais seriam apreciados.
Respostas:
Esta página pode ajudar, pois ela analisa algumas estruturas de teste de unidade C ++:
Confira CPPUnitLite ou CPPUnitLite2 .
CPPUnitLite foi criado por Michael Feathers, que originalmente portou JUnit de Java para C ++ como CPPUnit (CPPUnit tenta imitar o modelo de desenvolvimento de JUnit - mas C ++ carece de recursos de Java [por exemplo, reflexão] para torná-lo fácil de usar).
CPPUnitLite tenta fazer uma verdadeira estrutura de teste no estilo C ++, não Java portada para C ++. (Estou parafraseando do livro Working Effectively with Legacy Code de Feather ). CPPUnitLite2 parece ser outra reescrita, com mais recursos e correções de bugs.
Eu também tropecei no UnitTest ++ que inclui coisas do CPPUnitLite2 e alguns outros frameworks.
A Microsoft lançou o WinUnit .
Há uma maneira de testar C ++ não gerenciado usando a estrutura de teste integrada do Visual Studio 2008 . Se você criar um projeto de teste C ++, usando C ++ / CLI, poderá fazer chamadas para uma DLL não gerenciada. Você terá que mudar o suporte do Common Language Runtime para / clr de / clr: safe se quiser testar o código que foi escrito em C ++ não gerenciado.
Tenho detalhes passo a passo no meu blog aqui: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Aqui está a abordagem que uso para testar o módulo IIS URL Rewrite na Microsoft (é baseado na linha de comando, mas deve funcionar para o VS também):
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 precisam aprender muito C ++ / CLI, todo o teste real será feito em C ++ nativo e a classe TestShim será usada para 'publicar' o teste em MSTest.exe (ou torná-lo visível )
Para adicionar novos testes, você apenas declara um novo método [TestMethod] void NewTest () {:: NewTest ();} e uma nova função nativa void NewTest (). Sem macros, sem truques, direto.
Agora, o arquivo heade é opcional, mas pode ser usado para expor os métodos da classe Assert com assinaturas nativas C ++ (por exemplo, wchar_t * em vez de Stirng ^), para que você possa mantê-lo próximo a 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
Pessoalmente, prefiro o WinUnit, pois não exige que eu escreva nada, exceto meus testes (eu construo um .dll como teste, não um exe). Acabei de criar um projeto e aponto WinUnit.exe para meu diretório de saída de teste e ele executa tudo o que encontra. Você pode baixar o projeto WinUnit aqui . (MSDN agora exige que você baixe a edição inteira, não o artigo. O WinUnit está incluído).
A estrutura incluída com o VS9 é .NET, mas você pode escrever testes em C ++ / CLI, então, desde que você se sinta confortável em aprender alguns .NET ismos, poderá testar quase todos os códigos C ++.
boost.test e googletest parecem ser bastante semelhantes, mas adaptados para usos ligeiramente diferentes. Ambos têm um componente binário, portanto, você precisará de um projeto extra em sua solução para compilar e executar os testes.
A estrutura que usamos é CxxTest , que é muito mais leve; é apenas cabeçalhos e usa um script Perl (!) para extrair informações do conjunto de testes de seus cabeçalhos (conjuntos são herdados de CxxTest :: Base, todos os nomes de seus métodos de teste começam com "test"). Obviamente, isso requer que você obtenha Perl de uma fonte ou de outra , o que adiciona sobrecarga à configuração do ambiente de construção.
Eu uso o UnitTest ++ .
Nos anos desde que fiz esta postagem, a fonte mudou do SourceForge para o github. Além disso, o tutorial de exemplo agora é mais agnóstico - não entra em nenhuma configuração ou definição de projeto.
Duvido que ainda funcione para o Visual Studio 6, pois os arquivos do projeto agora são criados por meio do CMake. Se você ainda precisa do suporte à versão mais antiga, pode obter a última versão disponível no branch SourceForge .
As ferramentas que foram mencionadas aqui são todas ferramentas de linha de comando. Se você procura uma solução mais integrada, dê uma olhada no cfix studio , que é um suplemento do Visual Studio para testes de unidade C / C ++. É bastante semelhante ao TestDriven.Net, mas para C / C ++ (não gerenciado) em vez de .NET.
Não tenho 100% de certeza sobre o VS2008, mas sei que a estrutura de teste de unidade que a Microsoft lançou no VS2005 como parte do Team Suite era apenas para .NET, não C ++
Eu usei o CppUnit também e funcionou bem. Quase o mesmo que NUnit / JUnit / assim por diante.
Se você usou boost, eles também têm uma biblioteca de teste de unidade
Os caras por trás do boost têm sérios problemas de codificação, então eu diria que seu framework deve ser muito bom, mas pode não ser o mais amigável :-)
O testador de unidade para Visual Studio 2008 é apenas para código .NET, até onde eu sei.
Usei CppUnit no Visual Studio 2005 e achei muito bom.
Pelo que me lembro, a configuração foi relativamente indolor. Apenas certifique-se de que em seus projetos de teste o vinculador (Linker → Entrada → Dependências Adicionais) inclua cppunitd.lib.
Então, #include <cppunit/extensions/HelperMacros.h>
em seu cabeçalho.
Você pode então seguir as etapas em http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html para fazer sua aula de teste funcionar.
Eu estava sofrendo para implementar o teste de unidade para um aplicativo C ++ não gerenciado em um ambiente Windows com Visual Studio. Então, consegui superar e escrever um post como uma orientação passo a passo para o teste de unidade de aplicativo C ++ não gerenciado. Espero que possa ajudá-lo.