2015-10-13 22 views
5

Capisco che questo non è il modo corretto di test unitario, ma abbiamo un ActionFilterAttribute sul nostro controller di base che non viene mai attivato durante i nostri test unitari. So che dovremmo testarlo in modo indipendente, ma vogliamo integrarlo nel nostro test globale end to end.Attributo nel controller di base che non si attiva nei test di unità in mvc5

[ThemeModel] 
public class BaseController : Controller 
{ 
    public MyModel Context { get; set; }  
} 

Come si integra il mio attributo quando eseguiamo il test dal controllore ereditato? Capisco che gli attributi non sono collegati con il controller e parte del framework mvc.

grazie ...

+0

È necessario creare un test di integrazione che utilizzano server host auto –

risposta

-1

È necessario testare il filtro separatamente. Creare gli oggetti contestuali del controller richiesti e l'utente "filter.OnActionExecuted (actionExecutedContext.Object);" come la sintassi.

+0

ho bisogno di integrare del tutto altrimenti ho bisogno di riscrivere tutti i test da un me-down-mano del progetto. Verificherò il filtro azione in modo indipendente ma altri test si stanno rompendo a causa di questo. –

0

Due opzioni penso. 1 è quello che stai facendo già, e non lo cambierei. 2 è la risposta al tuo problema. Credo che sia bello avere entrambi.

  1. Tenere separati i test dell'unità per il controller ei filtri. Questo è corretto per UT, dal momento che il controller e i filtri non devono avere dipendenze l'una dall'altra. In questo modo saprai che ognuno funziona correttamente da solo (Principio della singola responsabilità).
  2. Creare un set separato di test che implementa HttpContextBase. Presumo che tu abbia già un finto HttpContextBase per fare una sessione o un biscotto, quindi metto in evidenza le cose principali per il tuo particolare filtro. (Se non lo fai, cerca solo HttpContextBase e test delle unità).

    public class MockHttpContext : HttpContextBase { public MockHttpContext() { MockRequest = new Mock<HttpRequestBase>(); // .. etc .. var actionExecutingContext = new Mock<ActionExecutingContext>(); actionExecutingContext.SetupGet(x => x.HttpContext).Returns(this); var filter = new ThemeModelAttribute(); filter.OnActionExecuting(actionExecutingContext.Object); // OnActionExecuted has similar setup if needed. } }

HTH!

0

Verificare che attributo ThemeModel ha AttributeUsage(Inherited = true)

Problemi correlati