Pregunta

Tengo una clase que envuelve GetGlobalResourceObject y GetLocalResourceObjet para que puedan usarse fácilmente en MVC. Las clases de validación del modelo cargan los mensajes de error dinámicamente desde los archivos de recursos. El problema son las pruebas unitarias. El código usa " ~ / " ;, y aunque todo funciona correctamente cuando se ejecuta la solución, no puedo ver cómo hacer las pruebas unitarias porque siempre recibo el siguiente error " System.Web.HttpException: la ruta virtual relativa de la aplicación '~ /' no se puede convertir en absoluto, porque no se conoce la ruta a la aplicación. "

El código que genera la excepción es el siguiente, utilizado para evaluar una expresión y devolver un 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

¿Alguna idea sobre cómo probar este y otros códigos que usan archivos de recursos?

¿Fue útil?

Solución

Tomé un enfoque ligeramente diferente. Utilizo archivos de recursos fuera de los directorios App_ *, en cuyo caso el IDE agregará una herramienta personalizada al archivo para generar un contenedor fuertemente tipado para los recursos que funciona en cualquier parte de la solución, incluidas las vistas, y se comporta durante las pruebas unitarias: http://odetocode.com/Blogs/scott/archive/ 2009/07/15 / 13211.aspx

Esa no es una respuesta exacta a su pregunta, pero creo que hacer que los recursos App_ * se comporten correctamente en todas las condiciones fue bastante trabajo.

Otros consejos

Puede crear una propiedad en su clase ResourceExtensions, por ejemplo bool IsInTestScope, y luego en su clase de prueba establecerlo en verdadero, y el método interno que devuelve texto localizado hace algo como esto:

Recurso público de cadena estática (este controlador de controlador, expresión de cadena, objeto params [] args)

{

if (! IsInTestScope)

{

ResourceExpressionFields fields = GetResourceFields (expresión, " ~ / ");

return GetGlobalResource (campos, argumentos);

}

cadena de retorno. Vacío;

}

He encontrado un enfoque para probar el código que usa recursos dentro de los directorios App_ *. Describí mi solución en mi blog texto del enlace

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top