2010-07-20 8 views
1

Mes questions sont les suivantes: comment puis-je tester si la méthode Execute d'un ICommand a été appelée sur un objet simulé?Test si ICommand a été exécuté

J'utilise le code suivant:

var mockOperandVM = new Mock<UCOperandViewModel>(); 
mockOperandVM.Setup (x => x.EditCommand).Returns (new RelayCommand<String> (x => { })); 

var toolbarTrayVM = new UCToolbarTrayViewModel (mockComponentsLocator.Object); 
toolbarTrayVM.EditCommand.Execute ("Edit"); 
mockOperandVM.Verify (x => x.EditCommand.Execute ("Edit"), "EditCommand with 'Edit' parameter was not executed on the mock object."); 

Je dois préciser ici que j'ai un ICommand EditCommand sur le UCOperandViewModel aussi et je veux vérifier si ce ICommand est exécuté quand je l'appelle EditCommand.Execute sur la barre d'outilsTrayVM.

Je reçois une ArgumentException lors de l'appel à Verify. Il dit que "Un constructeur correspondant pour les arguments donnés n'a pas été trouvé sur le type mocké.".

Merci d'avance.

+0

Pourriez-vous s'il vous plaît fournir plus de code? Comment utilisez-vous l'ICommand, le code de test de l'échantillon et que tentez-vous de tester? –

+0

Quel cadre de moquerie utilisez-vous (le cas échéant)? –

+0

J'utilise le framework Moq. – Zoliqa

Répondre

1

Injecter le service dans SUT - de préférence en utilisant Injection de constructeur. Cela vous permettra d'écrire du code de test unitaire comme celui-ci:

var mock = new Mock<IService>(); 

var sut = new MyViewModel(mock.Object); 
sut.SomeCommand.Execute(null); 

mock.Verify(s => s.Foo()); 

Cet exemple utilise Moq.

+1

Pouvez-vous donner plus de détails? Qu'est-ce que IService? Foo()? – droughtrain

+0

c'est une interface de dépendance, service pour db. vous devez vous moquer de lui pour pouvoir injecter votre viewmodel. –

Questions connexes