Testes na trilha de C++

Saiba como testar seus exercícios de C++ no Exercism


Cada exercício fornece os testes de unidade e uma receita de build do CMake. Você fornece a implementação. Cada arquivo de teste deve ser linkado à sua implementação para produzir um executável de console que roda os testes. Ao rodar o executável de testes, ele imprime mensagens para cada teste que falha e reporta um código de saída diferente de zero quando os testes falham.

Observação: Seu código é testado contra a suíte de testes toda vez que você compila seu projeto. Se o seu código não passar em um ou mais testes, mas for código C++ válido, ele ainda será compilado.

Trabalhar em cada exercício é um processo de:

  • Criar o build inicial com o CMake
  • Para cada teste de unidade:
    • Resolver os erros de compilação para fazer o teste falhar.
    • Implementar o suficiente para fazer o teste passar.
    • Refatorar sua implementação para melhorar a legibilidade, reduzir duplicação etc.
    • Descomentar o próximo teste

Criando o build inicial com o CMake

Cada exercício traz um arquivo CMakeLists.txt junto com os testes de unidade. Ele contém a receita pronta do CMake para cuidar do build para você. Você não deve precisar editar esse arquivo. A receita fornecida assume que sua implementação existe como um arquivo de cabeçalho e um arquivo-fonte com o nome do exercício.

Por exemplo, o exercício bob espera uma implementação em bob.h e bob.cpp. Para exercícios com hífens no nome, presume-se que os arquivos-fonte usem underscores, então word-count espera word_count.h e word_count.cpp. Você pode decidir que sua implementação é simples o bastante para ficar inteiramente no cabeçalho, e nesse caso pode omitir o arquivo cpp.

Crie seus arquivos de implementação iniciais antes de rodar o CMake. Se você não tiver os arquivos bob.h e bob.cpp ao rodar o CMake para o exercício bob, o CMake vai gerar um erro dizendo que os arquivos não foram encontrados. Esses arquivos podem estar vazios, mas precisam existir.

Com essa receita, o CMake pode gerar um projeto adequado ao seu ambiente rodando cmake -G com um gerador adequado e o local do diretório do exercício. O CMake vai gerar um script de build adequado ao seu sistema operacional. Para manter esses arquivos gerados separados do código-fonte do seu exercício, é comum criar um diretório chamado build para guardar esses arquivos de build gerados, além do código compilado. Assim, a pasta do seu exercício fica organizada e sem bagunça.

Depois que o CMake criar o ambiente de build, você pode compilar seu código usando o comando adequado ao seu ambiente:

  • Linux com make: make
  • Windows com Visual Studio: selecione Build / Build Solution no menu.
  • MacOS com Xcode: selecione Build na barra de ferramentas
  • MacOS com "Unix Makefile": make Se estiver usando o aplicativo Exercism CLI

Veja abaixo exemplos de como rodar o CMake em ambientes diferentes.

Linux com Make

O nome do gerador para o CMake é Unix Makefiles. Supondo que o exercício atual seja bob e que estejamos na pasta do exercício:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

Este exemplo mostra como criar arquivos vazios para a implementação antes de rodar o CMake.

Basta digitar make no diretório build para compilar os testes. Isso deve gerar erros de compilação. Depois de corrigir os erros, make vai compilar e rodar os testes.

Windows com Visual Studio

O Visual Studio tem suporte nativo a projetos CMake, então você não deve precisar instalar o CMake separadamente nem rodá-lo fora do Visual Studio. Siga este guia para configurar o projeto CMake no Visual Studio.

MacOS com Xcode

O nome do gerador para o CMake é Xcode. Supondo que o exercício atual seja bob e que estejamos na pasta do exercício:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

Este exemplo gera os arquivos do XCode para que você possa abrir o projeto no XCode. Com o projeto aberto no XCode, talvez você precise adicionar outro target. Para um novo target, vá em File -> New -> Target no menu, OS X \ Application \ Command Line Tool -> Next, escolha C++ como linguagem e informe um nome para o target. Rode o código usando o target.

Se o seu terminal exibir o erro Xcode x.x not supported, é bem provável que o Xcode não esteja instalado na sua máquina ou que sua versão esteja desatualizada. Baixe e instale o Xcode pela App Store ou por este link. Erros parecidos com The CXX compiler identification is unknown provavelmente serão resolvidos seguindo as instruções para instalar o GCC ou adicionando outro target no Xcode, conforme o parágrafo acima.

MacOS com Make ao usar o Exercism CLI

Este exemplo ajuda especificamente quem quer usar o aplicativo Exercism CLI para configurar, testar e enviar seus exercícios de C++.

O nome do gerador para o CMake é Unix Makefiles. Supondo que o exercício atual seja bob e que estejamos na pasta do exercício:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

Neste exemplo, criamos arquivos vazios para a implementação antes de rodar o CMake, mas não criamos um diretório build vazio. Isso porque o Exercism CLI usa o arquivo .exercism/metadata.json no diretório raiz para interpretar os casos de teste.

Basta digitar exercism test no diretório raiz para compilar os testes. Isso deve gerar erros de compilação. Depois de corrigir os erros, rodar exercism test de novo vai compilar e executar os testes usando o Exercism CLI.