J'essaye d'écrire des tests unitaires pour un peu de code impliquant des événements. Comme j'ai besoin de déclencher un événement à volonté, j'ai décidé de me fier à RhinoMocks pour le faire, puis de m'assurer que les résultats des événements levés sont comme prévu (quand ils cliquent sur un bouton, les valeurs devraient changer dans Donc, je fais un peu de recherche et réalise que j'ai besoin d'un Event Raiser pour l'événement en question. Ensuite, c'est aussi simple que d'appeler eventraiser.Raise(); et nous sommes bons.Rhino Mocks appelant au lieu d'enregistrer dans NUnit
Le code pour obtenir un relanceur d'événement que j'ai écrit comme cela est suit (écrit en C#) (plus ou moins copié directement sur le net) je teste alors
using (mocks.Record())
{
MyControl testing = mocks.DynamicMock<MyControl>();
testing.Controls.Find("MainLabel",false)[0].Click += null;
LastCall.IgnoreArguments();
LastCall.Constraints(Rhino.Mocks.Constraints.Is.NotNull());
Raiser1 = LastCall.GetEventRaiser();
}
comme en mode de lecture.
using (mocks.Playback())
{
MyControl thingy = new MyControl();
int temp=thingy.Size.Height;
Raiser1.Raise();
Assert.Greater(temp, thingy.Size.Height);
}
Le problème est que lorsque j'exécute ces tests via NUnit, il échoue. Il lève une exception à la ligne testing.Controls.Find ("MainLabel", false) [0] .Click + = null; qui se plaint d'essayer d'ajouter null à l'écouteur d'événement. Plus précisément, "System.NullReferenceException: référence d'objet n'est pas définie sur une instance de l'objet"
Maintenant, j'étais sous la compréhension que tout code sous le titre Mocks.Record ne serait pas réellement appelé, il créerait plutôt des attentes pour les appels de code dans la lecture. Cependant, ceci est la deuxième instance où j'ai eu un problème comme celui-ci (le premier problème impliquait des classes/cas beaucoup plus compliquées) Où il apparaît dans NUnit que le code est appelé normalement au lieu de créer des attentes. Je suis curieux de savoir si quelqu'un peut signaler ce que je fais mal. Ou un moyen alternatif pour résoudre le problème principal.
Cela ressemble à la réponse. La syntaxe ci-dessus me va bien ... – jpoh
Yep. Cela s'avère être le problème. Bien que la façon de contourner le problème et d'élever l'événement de toute façon est le nouveau problème, mais je vais comprendre cette partie. – Kurisu