Unit Test – Resolvendo erro ao executar vários testes ao mesmo tempo

Um dia desses, ao realizar alguns testes, percebi que rodando um determinado teste de forma isolada eu não tinha problemas. Porém ao executar todos ao mesmo tempo, o teste quebrava (independentemente de clean em banco). 

image

A mensagem de erro obtida:

COM object that has been separated from its underlying RCW cannot be used

System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used.”

A mensagem de erro é bem antiga. Mas para testes, era algo que não tinha visto.
Analisando, vi que o método de teste acessava um componente COM através de uma chamada implícita de anotação. Desta forma teremos dois processos (nativo e COM) ao rodar todos os testes. Dessa forma, como não é possível disparar dois processos em uma mesma thread, obtemos o erro citado acima.

Podemos resolver este problema apenas realizando uma pequena configuração ao seu arquivo de testes (xml).

image

Abra o Local.testsettings em um XML (Text) Editor e modifique o parâmetro apartmentState=”STA” para “MTA” como na instrução abaixo:

<testsettings  xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" name="Local">
<description>These are default test settings for a local test run.</description>
<execution>
<executionthread  apartmentstate="MTA"></executionthread>
</execution>
</testsettings>

Da forma tradicional o método testado não é compatível com STA (Single Threaded Apartment), então, tive que alterar e executar meus testes em modo MTA (Multithreaded Apartment).

Salve, feche e abra o VS e execute todos seus testes novamente.

image

Pronto, agora tudo verde. Só alegria!

Você pode saber mais sobre Single Threaded e Multithreaded na documentação da Microsoft.

[]’s

Finalizado mais um treinamento de C# 4.0

Fui convidado pela LG Sistemas, para ministrar o treinamento de C# para a turma do LG Formando Talentos. É uma nobre iniciativa da empresa dentro do mercado, onde já se formaram mais de 220 alunos deste 2005. O Programa LG Formando Talentos é uma iniciativa da LG Sistemas, que visa oferecer um curso de qualificação para formar pessoas da comunidade de software. Além de receberem essa formação, os alunos têm a oportunidade de fazer parte do quadro de colaboradores da LG.

fototurma_02_a

Aprovados para o próximo módulo

Neste módulo foram 40 horas de treinamento, contando com avaliações através de exercícios, trabalho final e prova.
Não teve moleza.. E essa turma se saiu muito bem!

Fico feliz de poder fazer parte do programa Formando Talentos da LG e ao mesmo tempo contribuir com a evolução na carreira de cada um.

Uma honra.

MCT 2013

Renovei mais uma vez meu título de instrutor de cursos oficiais Microsoft. Não sei ao certo quantos anos estou como MCT, mas sempre fico feliz quando recebo o welcome kit. Espero que eu ainda consiga por mais anos.

foto 1

Agora a tensão é pela renovação do MVP.
=)