Frage

Ich habe eine Klasse, die wraps die GetGlobalResourceObject und GetLocalResourceObjet, so dass Sie kann leicht verwendet werden in MVC.Die Validierung des Modells Klassen dann laden Sie die Fehlermeldungen, die dynamisch aus Ressourcen-Dateien.Das problem ist, unit-Tests.Verwendet den code "~/", und während alles funktioniert korrekt, wenn die Lösung ausgeführt wird, kann ich nicht sehen, wie die unit-tests, weil ich immer die folgende Fehlermeldung "System.Web.HttpException:Die Anwendung der relativen virtuellen Pfad '~/' nicht verabsolutiert werden, da der Pfad zu der Anwendung ist nicht bekannt."

Der code, der die Ausnahme ausgelöst wird, ist die folgende, verwendet, um einen Ausdruck auszuwerten und Rücksendung einer globalen Ressource-Objekt.

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

Irgendwelche Ideen auf, wie um zu testen, diese und andere Codes, die verwendet Ressource-Dateien?

War es hilfreich?

Lösung

Ich nahm einen etwas anderen Ansatz.Ich benutze Ressource-Dateien außerhalb des App_* Verzeichnisse, in diesem Fall wird die IDE fügen Sie ein benutzerdefiniertes tool, um die Datei zu erzeugen eine stark typisierte wrapper für die Ressourcen, die funktioniert überall in der Lösung, einschließlich der in Aussicht, und verhält sich während unit-tests: http://odetocode.com/Blogs/scott/archive/2009/07/15/13211.aspx

Das ist nicht eine genaue Antwort auf deine Frage, aber ich glaube, dass immer die App_* Ressourcen, die sich korrekt Verhalten unter allen Bedingungen war ziemlich viel Arbeit.

Andere Tipps

Sie konnten eine Eigenschaft in Ihrer ResourceExtensions Klasse erstellen, zum Beispiel Bool IsInTestScope, und dann in der Testklasse stellen es auf wahr, und im Inneren Methode, die lokalisierte Text etwas tun, wie diese zurückgibt:

public static string Ressource (dieser Controller-Controller, String-Ausdruck, params Object [] args)

{

if (! IsInTestScope)

{

ResourceExpressionFields Felder = GetResourceFields (Ausdruck, "~ /");

Rückkehr GetGlobalResource (Felder, args);

}

Rückkehr string.Empty;

}

Ich habe Ansatz für die Test-Code gefunden, die Ressourcen innerhalb app_ * Verzeichnisse verwendet. Ich beschrieb meine Lösung in meinem Blog Linktext

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top