Comment puis-je simuler une demande de page pour une page .net MVC?Tests unitaires dans asp.net MVC, comment puis-je simuler une demande de page?
8
A
Répondre
15
RhinoMocks Utilisation:
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var httpRequest = MockRepository.GenerateMock<HttpRequestBase>();
httpContext.Expect(c => c.Request).Return(httpRequest).Repeat.Any();
... set up expectations on request...
var controller = new MyController();
controller.ControllerContext = new ControllerContext(httpContext,
new RouteData(),
controller);
...invoke action, check assertions...
httpContext.VerifyAllExpectations();
httpRequest.VerifyAllExpectations();
11
Utilisation Moq:
var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.Setup(x => x.ApplicationPath).Returns("/");
request.Setup(x => x.Url).Returns(new Uri("http://localhost/home"));
request.Setup(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new YourController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
11
manuellement (parce que je déteste les cadres Mocking qui nécessitent 8 lignes de configuration par test)
// in some common location, only once
public class MockHttpContext : HttpContextBase
{
public MockHttpRequest m_request = new MockHttpRequest();
public MockHttpResponse m_response = new MockHttpResponse();
public override HttpRequestBase Request
{ get { return m_request; } }
public override HttpResponseBase Response
{ get { return m_response; } }
}
public class MockHttpRequest : HttpRequestBase
{
// override whatever bits you want (eg cookies)
}
public class MockHttpResponse : HttpResponseBase
{
// override whatever bits you want (eg cookies)
}
// in your specific test
controller = new YourController {
ControllerContext = new ControllerContext { HttpContext = new MockHttpContext() }
};
Questions connexes
- 1. Tests unitaires: Création d'une requête simulée pour simuler une demande de page MVC
- 2. Tests unitaires Redirection ASP.NET MVC
- 3. tests unitaires ASP.NET MVC avec NUnit
- 4. Comment faire des tests unitaires pour IgnoreRoute dans ASP.NET MVC
- 5. comment simuler IsStartupScriptRegistered dans ASP.NET MVC
- 6. tests unitaires routes MVC que le POST
- 7. Comment faire pour simuler la demande sur le contrôleur dans ASP.Net MVC?
- 8. Tests unitaires dans .NET: Comment simuler un fournisseur de données d'entité
- 9. ASP.NET MVC - Mock une demande de formulaire
- 10. Mock SSL HttpRequest pour les tests unitaires
- 11. Tempdata dans ASP.Net MVC avec demande JSON
- 12. Tests unitaires InstallScript
- 13. Tests unitaires dans Xcode 3.1
- 14. Tests unitaires SiteMapNode
- 15. Tests unitaires écrasa Méthode
- 16. Tests unitaires Visual Studio
- 17. RedirectToReferrer de tests unitaires Monorail()
- 18. Tests unitaires avec plusieurs collaborateurs
- 19. Tests unitaires asp.net mvc - Est-ce que viewengine peut trouver la vue?
- 20. Tests unitaires pour Boost.Spirit
- 21. Thoughtworks Cruise: Tests unitaires?
- 22. ResourceManager et tests unitaires
- 23. Tests unitaires en PHP?
- 24. Comment tester des routes unitaires dans ASP.NET MVC Beta 1?
- 25. Tests unitaires WPF UserControls
- 26. Héritage des tests unitaires
- 27. MVC tests unitaires, modèle envoyé à l'accès Voir
- 28. Tests unitaires NHibernate UserTypes
- 29. Tests unitaires en flex
- 30. Tests unitaires en Python
J'aime ce. C'est beaucoup plus facile à comprendre que de se moquer. Quelle est la raison pour laquelle m_request et m_response sont publics? –
parce que c'est un faux objet conçu pour faciliter les tests. Faire ces privés signifierait juste que si je voulais les changer (et parfois vous pourriez) je devrais avoir une propriété, etc., etc. Certaines règles telles que la dissimulation d'implémentation sont activement nuisibles dans ce genre d'environnement –
J'ai réalisé pourquoi ils suis public après avoir posé la question. Ni Request ni Response n'ont pas de setters, parce que c'est comme ça dans le HttpContextBase. Donc, si j'ai besoin de muter la demande et la réponse de mes tests unitaires, j'ai besoin d'eux publics. –