Je suis un peu confus à ce qui se passe ici. Je regarde l'exemple Puzzle d'Atomic Object montrant comment tester un modèle Model-View-Presenter Puzzle.zipC# Noob - Evénement de déclenchement dans une classe d'interface simulée - Comment ce code fonctionne-t-il?
La vue a un événement privé. La vue possède également une fonction Subscribe (déléguer) qui ajoute le délégué à l'événement. Le Presenter est passé dans un IView et un IModel. Pendant la construction, il souscrit à la vue et l'accroche à une fonction sur le modèle.
Pour les tests unitaires du Presenter, la classe View est raillée à l'aide de NMock. Donc, c'est juste une classe stupide, et la fonction Subscribe() ne fait rien. Bien sûr, pour tester le présentateur, vous devez simuler la vue et le modèle, puis déclencher l'événement dans la vue et vous assurer que la fonction du modèle a été appelée. Le code d'exemple fonctionne très bien - cependant, je ne comprends pas comment cela fonctionne !!
Quelques extraits:
private DynamicMock modelMock;
private IPuzzleModel model;
private DynamicMock viewMock;
private IPuzzleView view;
private SavedTypeOf moveRequestConstraint;
[SetUp]
public void SetUp()
{
modelMock = new DynamicMock(typeof(IPuzzleModel));
modelMock.Strict = true;
model = modelMock.MockInstance as IPuzzleModel;
// Setup the view
viewMock = new DynamicMock(typeof(IPuzzleView));
viewMock.Strict = true;
view = viewMock.MockInstance as IPuzzleView;
moveRequestConstraint = new SavedTypeOf(typeof(PointDelegate));
viewMock.Expect("SubscribeMoveRequest", moveRequestConstraint);
// create the presenter
new PuzzlePresenter(model, view);
}
[Test]
public void test_MoveRequest_fromView()
{
Point point = new Point(1, 2);
modelMock.Expect("MoveRequest", point);
PointDelegate trigger = moveRequestConstraint.GetInstance as PointDelegate;
trigger(point);
}
D'une certaine façon, le « déclencheur (point) » appel est effectivement connecté à la vue, et est à l'origine de l'événement privé dans le but de déclencher. Je ne peux pas comprendre comment cela fonctionne - je ne vois pas où il est connecté à l'instance de vue. Qu'est-ce que je rate? J'essaie d'utiliser NMock 2. Il semble que la variable moveRequestConstraint reçoive la valeur transmise à SubscribeMoveRequest() dans la fonction TestSetup. Cependant, c'est la syntaxe NMock 1 - et NMock 2 ne semble pas supporter cette syntaxe. Comment ferais-je avec NMock 2?