Я новичок в moq, и я пытался протестировать поведение контроллера (MVC): когда представление вызывает определенное событие, контроллер вызывает определенную функцию в модели, вот классы -
public class Model
{
public void CalculateAverage()
{
...
}
...
}
public class View
{
public event EventHandler CalculateAverage;
private void RaiseCalculateAverage()
{
if (CalculateAverage != null)
{
CalculateAverage(this, EventArgs.Empty);
}
}
...
}
public class Controller
{
private Model model;
private View view;
public Controller(Model model, View view)
{
this.model = model
this.view = view;
view.CalculaeAverage += view_CalculateAverage;
}
priavate void view_CalculateAverage(object sender, EventArgs args)
{
model.CalculateAverage();
}
}
и тест -
[Test]
public void ModelCalculateAverageCalled()
{
Mock<Model> modelMock = new Mock<Model>();
Mock<View> viewMock = new Mock<View>();
Controller controller = new Controller(modelMock.Object, viewMock.Object);
viewMock.Raise(x => x.CalculateAverage += null, new EventArgs.Empty);
modelMock.Verify(x => x.CalculateAverage());
//never comes here, test fails in above line and exits
Assert.True(true);
}
Проблема заключается в том, что во второй последней строке теста произошел сбой с «Вызов не был выполнен на макете: x => x.CalculateAverage ()». Еще одна вещь, которую я заметил, заключается в том, что тест завершается на этой второй последней строке, и последняя строка никогда не выполняется. Я все делаю правильно?