Páginas

sexta-feira, 27 de maio de 2011

Testando métodos privados

Me deparei com uma thread interessante sobre unit test no StackOverflow (melhor site para postar dúvidas na minha opinião):

A dúvida era como testar unitariamente métodos privados.

Destaco duas respostas técnicas: utilizar o atributo InternalsVisibleToAttribute (http://devlicio.us/blogs/derik_whittaker/archive/2007/04/09/internalsvisibleto-testing-internal-methods-in-net-2-0.aspx), que faz com que tipos fiquem visíveis para unit tests, mas que acabam deixando "rastros" nos assemblies quando compilados mesmo em modo Release; utilizar AccessPrivateWrapper (http://www.amazedsaint.com/2010/05/accessprivatewrapper-c-40-dynamic.html), que encapsula o acesso a métodos privados através do dynamic do C# 4.0.

Mas a melhor resposta, na minha opinião, não é nenhuma dessas e sim uma conceitual: métodos privados não deveriam ser alvo de testes unitários.

Sugiro dar uma olhada no fórum: http://stackoverflow.com/questions/250692/how-do-you-unit-test-private-methods

[]'s

terça-feira, 24 de maio de 2011

Configurando conexão com Oracle através de TNS - básico

Havia trabalhado com Oracle alguns anos atrás, e pra mim esse SGBD tem muita coisa desconhecida... Precisei pegar um projeto onde que usa esse banco de dados. Meu primeiro "desafio" foi entender como fazer para configurar o client do Oracle para poder conectar a aplicação ASP.NET na base de dados. Isso deve ser o básico do básico para quem trabalha com Oracle, mas como pra mim é novidade, decidi deixar isso documentado no blog já que a idéia original dele é ser uma knowledge base pessoal (apesar que eu admito, não sou tão frequente com os posts como eu gostaria de ser).

Bom, em primeiro lugar, eu precisei baixar os componentes client do Oracle. Isso eu fiz baixando os componentes do Instant Client e os colocando na pasta C:\oracle\instantclient_10_2\ (o link de onde baixei está logo abaixo). Esse Instant Client é um conjunto de componentes que permite a execução de aplicações que consomem bases Oracle sem a necessidade de fazer a instalação completa do cliente, através de setup, CD, etc.

Em seguida, eu precisei entender como configurar um arquivo chamado tnsnames.ora. Que raios que era isso? Bom, trata-se de um arquivo contendo as definições de endereços de servidores para a conexão. O arquivo tnsnames.ora me foi enviado por e-mail,e para configurá-lo foi necessário os seguintes passos:
  1. Colocar este arquivo no disco local. Acabei colocando em C:\oracle\instantclient_10_2\network\admin\. Note que é importante este arquivo estar dentro da pasta network\admin (o que vem antes pode variar).
  2. Criar uma variável de ambiente chamada ORACLE_HOME. Como valor, coloquei o caminho C:\oracle\instantclient_10_2 (pasta onde se encontrava o diretório network\admin).
Pronto, com isso minha aplicação funcionou!

Links interessantes:
Obs. Se alguém que conhece mais o Oracle e quiser acrescentar alguma coisa, por favor comente!

[]'s

ATUALIZAÇÃO (18/01/2012): Olá. Um detalhe que é legal citar aqui também é quando temos uma aplicação rodando no IIS que acessa o Oracle e dá erro ORA-12154: TNS:could not resolve the connect identifier specified. Nas ocorrências que tive disso, bastou dar permissão de leitura para o usuário que roda o ASP.NET para ele poder ler o arquivo tnsnames.ora lá na pasta onde este arquivo se encontra.