Comment puis-je générer un événement lorsqu'une méthode est appelée à l'aide Moq?
J'ai une interface comme ceci:
public interface IMyInterface
{
event EventHandler<bool> Triggered;
void Trigger();
}
Et j'ai un moqué d'objet dans mon unité de test comme ceci:
private Mock<IMyInterface> _mockedObject = new Mock<IMyInterface>();
Je veux faire quelque chose comme ceci:
//pseudo-code
_mockedObject.Setup(i => i.Trigger()).Raise(i => i.Triggered += null, this, true);
Toutefois, il ne ressemble pas à Raise
est disponible sur le ISetup
interface qui revient. Comment puis-je faire cela?
Vous devez vous connecter pour publier un commentaire.
Votre pseudo-code était presque sur place. Vous avez besoin d'utiliser
Raises
au lieu deRaise
. De vérifier la Moq Démarrage Rapide: Événements pour les versions Moq 4.x et vous verrez où vous avez fait l'erreur.Ici est la extrait de forme GitHub
Raise
est fait sur la maquette elle-même de ne pas l'installationAlors j'ai pensé que ce que je faisais mal. Je vais poster la réponse ici, mais donner du crédit à Nkosi parce que je n'ai pas vraiment poser correctement la question, et il a fourni beaucoup d'informations utiles.
Avec une méthode asynchrone sur une maquette, vous devez d'abord spécifier qu'il renvoie une Tâche avant de pouvoir déclencher des événements. Donc, dans mon exemple (sachant que j'aurais eu
Task Trigger();
que la signature de la méthode, c'est le code que je cherchais:Apparemment c'est possible de simplifier encore plus loin en C# 4.6, pour cela:
Raises
, droit? pasRaise
Expansion sur SoaperGEM réponse, toutes les méthodes qui renvoient à quelque chose (peu importe le type) doit retourner la valeur spécifiée avant le déclenchement de l'événement. Depuis de méthodes asynchrones retour
Task
, de méthodes asynchrones entrent dans cette catégorie. J'ai une méthode qui retourne unstring
, et j'ai été à essayer de comprendre pourquoi je n'arrivais pas à déclencher l'événement avec la Maquette de l'objet. Ensuite, j'ai essayé de revenir en premier et il a très bien fonctionné.Prendre SoaperGEM l'exemple, et en supposant que
Trigger()
retourne une chaîne de caractères: