Événements de collecte à partir d'une maquette/stub à l'aide de Rhino se moque de
Comment puis-je déclencher un événement à partir d'une maquette/stub à l'aide de Rhino se moque?
J'ai trouvé quelques réponses à cette question sur le web, mais ils semblent tous pour utilisation à l'Enregistrement/Relecture-syntaxe, mais je suis en utilisant les Organiser/Act/Vérifie la syntaxe.
Des suggestions?
Un petit exemple...
Disons que je suis en utilisant le pattern MVVM et ont cette classe de modèle:
public class MyModel
{
private int _myValue;
public event EventHandler ValueChanged;
public void SetValue(int newValue)
{
_myValue = newValue;
if (ValueChanged != null)
{
ValueChanged(this, null);
}
}
}
Comme vous pouvez le voir, la classe a d'une valeur entière et une méthode qu'il définit. Lorsque la valeur est définie, un ValueChanged
événement est déclenché.
Cette classe de modèle est utilisé par un viewmodel:
public class MyViewModel
{
private MyModel _myModel;
public MyViewModel(MyModel myModel)
{
_myModel = myModel;
_myModel.ValueChanged += ValueChangedHandler;
}
private void ValueChangedHandler(object sender, EventArgs e)
{
MyString = "Value has changed";
}
public string MyString { get; set; }
}
Ce viewmodel écouter la ValueChanged
événement sur le modèle et les mises à jour lorsqu'il est soulevé.
Maintenant je veux tester que le viewmodel est mis à jour lorsque le modèle soulève l'événement.
[TestMethod]
public void MyViewModel_ModelRaisesValueChangedEvent_MyStringIsUpdated()
{
//Arrange.
var modelStub = MockRepository.GenerateStub<MyModel>();
MyViewModel viewModel = new MyViewModel(modelStub);
//Act
-HERE I WANT TO RAISE THE VALUE CHANGED EVENT FROM modelStub.
//Assert.
Assert.AreEqual("Value has changed", viewModel.MyString);
}
Noter que ceci est juste un exemple et non pas mon code (qui est le plus complexe). J'espère que vous pouvez ne pas tenir compte des fautes de frappe et d'autres petites erreurs.
Vous devez vous connecter pour publier un commentaire.
Edit: L'erreur que vous rencontrez peut probablement être résolu en changeant le talon de type à une interface
IModel
(c'est la façon dont mes propres tests travail). J'ai changé dans l'exemple ci-dessus, mais vous devrez également modifier leMyViewModel
constructeur déclaration de prendre le type d'interface.L'ajout de la
virtual
mot-clé à l'événement déclaration peut également fonctionner.