André Carlucci

Skeptic .net development

Testando JsonResults que retornam tipos anônimos no Asp.Net MVC

Durante muito tempo eu usei reflection ou mesmo helpers que executam o contexto para testar JsonResults que retornam tipos anônimos.

Esses dias achei um truque bem legal que vou compartilhar aqui. Suponha a action abaixo:

ps: eu sei que eu poderia criar uma classe tipada e usar como retorno, mas estou fazendo proposital para demonstrar a ideia.

Usando a classe RouteValueDictionary, obtemos um dicionário de string/objeto já com todos os nossos objetos construídos. Este teste abaixo vai passar:

Bom TDD pra vocês.

EDIT:

O Juan Lopes comentou uma outra maneira de se testar json results que eu acho bem interessante. No comentário ele construiu uma representação DOM que implementa o método Equals. Não pesquisei como fazer isso no .net, mas podemos usar o mesmo serializador que o asp.net mvc usa e simplesmente comparar 2 strings, fazendo algo parecido:

Já usei muito isso, mas dependendo da complexidade do objeto que queria retornar, ficava chato criar a string esperada na mão. Acabava usando o próprio serializador para pegar a string retornada, mas daí não dava pra escrever o teste antes.

O que gostei do primeiro método é que não vemos o json. Confiamos no serializador e checamos somente se estamos retornando as características corretas a serem consumidas. Por isso também que sempre que posso uso objetos tipados para as respostas.