Pergunta

Eu tenho uma classe que envolve o GetGlobalResourceObject e GetLocalResourceObjet para que eles possam ser facilmente utilizado em MVC. As classes de validação do modelo, em seguida, carregar as mensagens de erro dinamicamente a partir de arquivos de recursos. O problema é o teste de unidade. Os usos de código "~ /", e enquanto tudo funciona corretamente quando a solução é correr, eu não posso ver como fazer os testes de unidade, porque eu sempre receber o seguinte erro "System.Web.HttpException: A aplicação caminho virtual relativo '~ / 'não pode ser feita absoluta, porque o caminho para a aplicação não é conhecido. "

O código que gera a exceção é o seguinte, usado para avaliar uma expressão e retorna um objeto de recurso global.

Private Function GetExpressionFields(ByVal expression As String) As ResourceExpressionFields
    Return GetExpressionFields(expression, "~/")
End Function

Private Function GetExpressionFields(ByVal expression As String, ByVal path As String) As ResourceExpressionFields
    Dim context As New ExpressionBuilderContext(path)
    Dim resource_builder As New ResourceExpressionBuilder()
    Dim fields As ResourceExpressionFields
    fields = DirectCast(resource_builder.ParseExpression(expression, GetType(String), context), ResourceExpressionFields)
    Return fields
End Function

Algumas ideias sobre como testar este e outros códigos que os arquivos de recursos usos?

Foi útil?

Solução

Eu levei uma abordagem um pouco diferente. Eu uso arquivos de recursos fora do App_ * diretórios, caso em que o IDE irá adicionar uma ferramenta personalizada para o arquivo para gerar um wrapper fortemente tipado para os recursos que funciona em qualquer lugar da solução, incluindo em pontos de vista, e se comporta durante testes de unidade: http://odetocode.com/Blogs/scott/archive/ 2009/07/15 / 13211.aspx

Isso não é uma resposta exata para sua pergunta, mas eu acredito recebendo os App_ * recursos para se comportar corretamente em todas as condições foi um pouco de trabalho.

Outras dicas

Você pode criar uma propriedade em sua classe ResourceExtensions, por exemplo bool IsInTestScope, e depois em sua classe de teste defini-lo em verdade, e método dentro que retorna texto localizado fazer algo como isto:

public static string Resource (este controlador Controller, expressão de cadeia, params object [] args)

{

if (! IsInTestScope)

{

= ResourceExpressionFields campos GetResourceFields (Expression, "~ /");

retornar GetGlobalResource (campos, args);

}

retorno string.Empty;

}

Eu encontrei abordagem para testar o código que usa recursos dentro de App_ * diretórios. Eu descrevi a minha solução no meu blog link de texto

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top