我是 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()”。我注意到的另一件事是测试在倒数第二行终止,并且最后一行永远不会执行。我做的一切正确吗?