Sto utilizzando SignalR in un progetto MVC5. Sto effettuando chiamate all'interno del controller in questo modo:Come devo simulare SignalR HubContext nel controller per il test dell'unità?
private Microsoft.AspNet.SignalR.IHubContext blogHubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<BlogHub>();
blogHubContext.Clients.All.addNewBlogToPage(RenderPartialViewToString("Blog", model));
Sto tentando di testare le azioni all'interno di questo controller. I test di unità funzionavano bene fino a quando non ho aggiunto la funzionalità SignalR. Ora sto cercando di capire come deridere l'HubContext. Ho 2 possibilità.
ho configurato l'hub nel costruttore in modo da avere qualcosa di simile a quanto segue:
private Microsoft.AspNet.SignalR.IHubContext blogHubContext; public BlogController(Microsoft.AspNet.SignalR.IHubContext topicHub = null){ blogHubContext = (blogHub != null) ? blogHub : Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<BlogHub>(); }
Allora posso in qualche modo prendere in giro il HubContext e inviarlo tramite al controller quando creo nel unità test. Finora ho solo questo però:
Mock<IHubContext> blogHub = new Mock<IHubContext>();
(Nota:. Ho semplificato tutto per concentrarsi sul solo il lato SignalR delle cose ci sono anche repository usati nella controllore ecc)
In alternativa, ho ho pensato di creare un'altra classe per avvolgere l'hub e quindi chiamare semplicemente le funzioni da questa per effettuare chiamate all'hub. Questo mi sembra molto più facile da prendere in giro per i miei test unitari, ma non sono sicuro che sia una buona idea.
Direzione apprezzata. O sono entrambe le vie accettabili? Grazie.
preferisco la prima opzione in quanto non è necessario un altro strato supplementare di classe wrapper, che non aggiunge alcuna funzionalità. –
@ AD.Net Grazie. In quel caso, qualsiasi idea su come posso fare il giro dell'hub per la funzionalità che sto usando. Ho faticato a capire come farlo, cosa che mi ha portato a pensare alla seconda opzione. – AndrewPolland
Hai familiarità con la derisione in generale? Prendere in giro un hub signalr sembra come se fosse quasi lo stesso che deride qualsiasi altra cosa. –