【发布时间】:2015-04-27 09:54:35
【问题描述】:
我有以下 ViewModel
public class MyViewModel : IMyViewModel
{
private readonly IMyModel myMode;
private ICommand _myCommand;
public MyViewModel(IMyModel model)
{
_model = model;
}
public ICommand MyCommand
{
get { return _myCommand ?? (_myCommand = new RelayCommand(x => MyMethod())); }
}
private void MyMethod()
{
_model.SomeModelMethod();
}
}
IMyViewModel 定义为
public interface IMyViewModel
{
ICommand MyCommand { get; }
}
我的模型接口定义为
public interface IMyModel
{
void SomeOtherCommand();
}
现在在我的单元测试中(使用 NSubstitute),我想检查当 MyCommand 被调用时,我的模型收到了对其方法 SomeModelMethod 的调用。我试过了:
[TestMethod]
public void MyViewModel_OnMyCommand_CallsSomeOtherMethodOnModel()
{
var model = Substitute.For<IMyModel>();
var viewModel = Substitute.For<IMyViewModel>();
viewModel.MyCommand.Execute(null);
model.Received().SomeOtherMethod();
}
但这目前不起作用。当调用 ViewModel 上的命令时,如何最好地测试我的 Model 方法是否被调用?
【问题讨论】:
-
与其为 viewModel 创建一个替代品,您可能更想做
new viewModel(model.object)或任何替代品。您不想模拟您实际测试的对象。
标签: wpf unit-testing nsubstitute