segunda-feira, 18 de abril de 2011

Teste Unitário de Aplicações 64 bits no Visual Studio

Tivemos que ler um arquivo Excel na nossa aplicação Azure. Sendo uma aplicação Azure, ela necessariamente tem que ser 64 bits.

(…huuummmm… Mentira. Você pode ativar a execução de aplicações 32 bits em um IIS 64 bits de acordo com esse cara aqui ó)

Ok. Eu achei que uma aplicação no Azure tinha que ser 64 bits, então quando fomos ler um arquivo do Excel, instalamos o Provider OleDb de 64-bits para o Office 2010, que permite coisas muito legais, tais como usar um DataAdapter pra executar um comando tipo “SELECT * FROM $Planilha1” e jogar esses dados dentro de um DataSet.

O problema foi quando executei os testes unitários de acesso ao arquivo Excel. Os testes sempre falhavam com a exceção “The 'Provider=Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine”. Isto porque por default os testes unitários no Visual Studio 2010 rodam em um ambiente de 32 bits. Como o provider é de 64 bits, ele não é reconhecido pelo código dos testes.

Imaginei as coisas mais malucas pra fazer estes testes rodarem, como p.e. fazer uma aplicação console 64 bits que chamasse o componente a testar, disparar essa aplicação de um teste, e depois verificar os resultados. Perdi uma manhã inteira tentando executar essa aplicação console de forma sincrona, pois eu só podia checar os resultados depois que o processo acabasse.

(“PS”: Você sabia que é um parto em .NET fazer um código que dispara um processo e espera pelo fim da execução desse processo? Poizé, eu não.)

Mas no final das contas, o Visual Studio já tem suporte para execução de testes em 64 bits. Nas configurações de teste (menu Test > Edit Test Settings > [sua configuração de teste].testsettings), você pode ir em “Hosts” e na opção “Run tests in 32 or 64 bit process” selecionar “Run tests in 64 bit process on 64 bit machine”. Se seu Windows é de 64 bits, o ambiente no qual os testes são executados será também de 64 bits. Assim os testes usando o provider de 64 bits rodaram sem problemas.

image