Domanda

Ho una classe che avvolge GetGlobalResourceObject e GetLocalResourceObjet in modo che possano essere facilmente utilizzati in MVC. Le classi di validazione del modello caricano quindi i messaggi di errore dinamicamente dai file di risorse. Il problema è il test unitario. Il codice usa " ~ / " ;, e mentre tutto funziona correttamente quando viene eseguita la soluzione, non riesco a vedere come effettuare i test unitari perché ricevo sempre il seguente errore " System.Web.HttpException: il percorso virtuale relativo dell'applicazione '~ /' non può essere reso assoluto, perché il percorso dell'applicazione non è noto. "

Il codice che genera l'eccezione è il seguente, utilizzato per valutare un'espressione e restituire un oggetto risorsa globale.

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

Qualche idea su come testare questo e altri codici che utilizzano file di risorse?

È stato utile?

Soluzione

Ho adottato un approccio leggermente diverso. Uso i file di risorse al di fuori delle directory App_ *, nel qual caso l'IDE aggiungerà uno strumento personalizzato al file per generare un wrapper fortemente tipizzato per le risorse che funzionano ovunque nella soluzione, incluso nelle viste, e si comportano durante i test unitari: http://odetocode.com/Blogs/scott/archive/ 2009/07/15 / 13211.aspx

Questa non è una risposta esatta alla tua domanda, ma credo che far funzionare correttamente le risorse App_ * in tutte le condizioni sia stato un po 'di lavoro.

Altri suggerimenti

Potresti creare una proprietà nella tua classe ResourceExtensions, ad esempio bool IsInTestScope, e quindi nella tua classe di test impostarla su true e all'interno del metodo che restituisce testo localizzato fai qualcosa del genere:

risorsa stringa statica pubblica (questo controller controller, espressione stringa, oggetto params [] args)

{

if (! IsInTestScope)

{

Campi ResourceExpressionFields = GetResourceFields (espressione, " ~ / ");

restituisce GetGlobalResource (fields, args);

}

return string.Empty;

}

Ho trovato un approccio per testare il codice che utilizza risorse all'interno delle directory App_ *. Ho descritto la mia soluzione nel mio blog link text

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top