J’utilise Moq pour créer un object fictif de HttpResponseBase. Je dois pouvoir tester que HttpResponseBase.End () a été appelé dans ma bibliothèque. Pour ce faire, je spécifie du texte avant l’appel et du texte après. Ensuite, je vérifie que seul le texte précédant l’appel de End () est présent dans HttpResponseBase.Output.
Le problème est que je ne vois pas comment se moquer de HttpResponseBase.End () pour qu’il arrête le traitement, comme dans ASP.NET.
public static HttpResponseBase CreateHttpResponseBase() { var mock = new Mock(); SsortingngWriter output = new SsortingngWriter(); mock.SetupProperty(x => x.StatusCode); mock.SetupGet(x => x.Output).Returns(output); mock.Setup(x => x.End()) /* what do I put here? */; mock.Setup(x => x.Write(It.IsAny())) .Callback(s => output.Write(s)); return mock.Object; }
Je ne sais pas trop ce que vous essayez d’atteindre, mais d’après votre description, il semble que vous tentiez de faire en sorte que votre Abstraction se comporte comme une implémentation particulière. En d’autres termes, étant donné que HttpResponse.End () a un certain comportement, vous voulez que votre Mock ait le même comportement?
En général, cela n’est pas particulièrement facile à faire avec Moq, car il n’a pas de concept d’attentes ordonnées (contrairement à RhinoMocks). Il y a cependant une demande de fonctionnalité pour cela .
Vous pourrez peut-être utiliser un rappel avec la configuration de la méthode End pour faire basculer un indicateur qui détermine tout comportement ultérieur du Mock, mais cela ne sera pas particulièrement joli. Je pense à quelque chose comme ça:
bool ended = false; var mock = new Mock(); mock.Setup(x => x.End()).Callback(() => ended = true); // Other setups involving 'ended' and Callbacks
Ensuite, tous les autres programmes d’installation ont une double implémentation, selon que l’opération ended
est vraie ou fausse.
Ce serait sacrément moche, alors je reconsidérerais sérieusement mes options pour le moment. Il y a au moins deux directions que vous pouvez prendre: