Rodando Testes de Unidade com Wine no Linux

Muitas vezes desejamos compilar e executar testes de unidade para a plataforma Windows. No entanto, reiniciar sua máquina e dar boot no Windows só para testar fica meio na contramão.

Uma alternativa é instalar o MinGW e o Wine, para podermos compilar e para executar os testes de unidade plataforma Windows, sem sair do conforto do Linux.

Para instalar o MinGW e o Wine:

# MinGW - Windows 32-bit:
sudo apt install gcc-mingw-w64-i686 g++-mingw-w64-i686

# MinGW - Windows 64-bit:
sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64

# Wine
sudo apt install wine

Para compilar para a plataforma Windows usamos os compiladores MinGW para C ou C++, para 32-bit ou 64-bit.

CompiladorWindows 32-bitWindows 64-bit
C (GCC)i686-w64-mingw32-gccx86_64-w64-mingw32-gcc
C++ (G++)i686-w64-mingw32-g++x86_64-w64-mingw32-g++
Compiladores MinGW para C/C++ em 32-bit ou 64-bit.

Por exemplo, para compilar os arquivos test_unit.c e unit.c e para Windows 32-bit usamos:

i686-w64-mingw32-gcc test_unit.c unit.c -o test.exe

Então, para rodar o executável no próprio Linux, através o Wine, usamos:

wine test.exe

Conclusão

Podemos executar testes de unidade da plataforma Windows (32-bit ou 64-bit), sem sair do Linux, usando o Wine.

Para rodar um executável qualquer com o Wine, no entanto, pode ser necessário fornecer DLLs (bibliotecas). Porém, a princípio, um teste de unidade não deve depender de nada externo, pois todas as dependências devem ser fakes (falsos) ou mocks (imitadores) e, portanto, não deveria cair neste problema.

Se o seu teste PRECISA de alguma DLL, ele provavelmente ele se encaixa melhor no grupo de testes de integração, não de testes de unidade.