Question

J'ai une classe qui englobe GetGlobalResourceObject et GetLocalResourceObjet afin qu'elles puissent être facilement utilisées dans MVC. Les classes de validation de modèle chargent ensuite les messages d'erreur de manière dynamique à partir de fichiers de ressources. Le problème est le test unitaire. Le code utilise "~ /", et bien que tout fonctionne correctement lorsque la solution est exécutée, je ne vois pas comment effectuer les tests unitaires car je reçois toujours l'erreur suivante: "System.Web.HttpException: le chemin virtuel relatif de l'application '~ /' ne peut pas être rendu absolu, car le chemin d'accès à l'application n'est pas connu. "

Le code qui lève l'exception est le suivant, utilisé pour évaluer une expression et renvoyer un objet de ressource 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

Des idées sur la façon de tester ce code et d’autres qui utilisent des fichiers de ressources?

Était-ce utile?

La solution

J'ai adopté une approche légèrement différente. J'utilise des fichiers de ressources en dehors des répertoires App_ *, auquel cas l'EDI ajoutera un outil personnalisé au fichier afin de générer un wrapper fortement typé pour les ressources fonctionnant n'importe où dans la solution, y compris dans les vues, et se comportant lors des tests unitaires: http://odetocode.com/Blogs/scott/archive/ 2009/07/15 / 13211.aspx

Ce n'est pas une réponse exacte à votre question, mais je pense que le bon fonctionnement des ressources App_ * dans toutes les conditions était un travail fastidieux.

Autres conseils

Vous pouvez créer une propriété dans votre classe ResourceExtensions, par exemple bool IsInTestScope, puis, dans votre classe de test, la définir sur true et une méthode inside renvoyant du texte localisé, procédez comme suit:

chaîne statique publique Resource (ce contrôleur de contrôleur, expression de chaîne, objet params [] args)

{

if (! IsInTestScope)

{

ResourceExpressionFields fields = GetResourceFields (expression, "~ /");

renvoyer GetGlobalResource (champs, arguments);

}

retourne string.Empty;

}

J'ai trouvé une approche pour tester le code qui utilise des ressources dans les répertoires App_ *. J'ai décrit ma solution dans mon blog texte du lien

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top