Prima di tutto, io sono consapevole del fatto che questa domanda è pericolosamente vicino a: How to MapPath in a unit test in C#C# Unità di test: test di un metodo che utilizza MapPath
spero tuttavia, che ha una soluzione diversa. Il mio problema segue:
Nel mio codice ho un oggetto che deve essere convalidato. Sto creando dei test unitari per ogni metodo di convalida per assicurarmi che stia convalidando correttamente. Sto creando dati simulati e caricandolo nell'oggetto, quindi convalidandolo. Il problema è che durante la convalida, quando si verifica un errore, viene assegnato un codice di errore. Questo codice di errore viene utilizzato per raccogliere informazioni sull'errore da un file xml utilizzando Server.MapPath. Tuttavia, quando si tenta di ottenere il file xml, viene generata un'eccezione che significa che il file non può essere trovato.
Poiché MapPath è nel mio codice di convalida e non nel mio test di unità, come faccio a ottenere il mio test dell'unità per riconoscere il percorso? Questa domanda ha senso?
Error Line (Nel mio codice di convalida non la mia prova di unità):
XDocument xdoc = XDocument.Load(HttpContext.Current.Server.MapPath("App_Data/ErrorCodes.xml"));
semplificata: test di unità chiama un metodo nel mio programma che chiama Server.MapPath che poi fallisce.
GetPath() dovrebbe essere virtuale. – dahlbyk
@Dan HttpContext.Current. restituisce null quando eseguiamo da TestProject. Un modo per evitarlo? –
@JibinMathew Sì, non utilizzare 'HttpContext.Current'. So che sembra faceto ma è vero. Generalmente, non prendere in giro classi che non possiedi, ma puoi scrivere una classe wrapper per 'HttpContextBase' che implementa la funzionalità desiderata. –