plan emergencia ejemplo deportiva definicion accion c# unit-testing events rhino-mocks

c# - ejemplo - plan de accion de emergencia deportiva



Criar eventos de un simulacro/apéndice usando Rhino Mocks (1)

[TestMethod] public void MyViewModel_ModelRaisesValueChangedEvent_MyStringIsUpdated() { //Arrange. var modelStub = MockRepository.GenerateStub<IModel>(); MyViewModel viewModel = new MyViewModel(modelStub); //Act modelStub.Raise( x => x.ValueChanged += null, modelStub, // sender EventArgs.Empty); //Assert. Assert.AreEqual("Value has changed", viewModel.MyString); }

Editar: El error que está encontrando probablemente se resuelva cambiando el tipo de stub a un IModel interfaz (así es como funcionan mis propias pruebas). Lo he cambiado en el ejemplo anterior, pero también tendrá que cambiar la declaración del constructor MyViewModel para tomar el tipo de interfaz.

Agregar la palabra clave virtual a la declaración de evento también puede funcionar.

¿Cómo puedo generar un evento desde un simulacro / apéndice usando Rhino Mocks?

He encontrado algunas respuestas a esta pregunta en la web, pero todas parecen usar la sintaxis Record / Replay, pero estoy usando la sintaxis Arrange / Act / Assert.

¿Alguna sugerencia?

Un pequeño ejemplo ...

Digamos que estoy usando el patrón MVVM y tengo esta clase de modelo:

public class MyModel { private int _myValue; public event EventHandler ValueChanged; public void SetValue(int newValue) { _myValue = newValue; if (ValueChanged != null) { ValueChanged(this, null); } } }

Como puede ver, la clase tiene un valor entero y un método que lo establece. Cuando se establece el valor, se ValueChanged un evento ValueChanged .

Esta clase de modelo es utilizada por un modelo de vista:

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; } }

Este modelo de vista escucha el evento ValueChanged en el modelo y las actualizaciones cuando se ValueChanged .

Ahora quiero probar que el modelo de vista se actualiza cuando el modelo plantea el evento.

[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); }

Tenga en cuenta que esto es solo un ejemplo y no mi código real (que es más complejo). Espero que puedas ignorar cualquier error tipográfico y otros pequeños errores.