使用 NSubstitute 对 ICommand 进行单元测试
Unit Testing ICommand with NSubstitute
我有以下 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 方法是否被调用?
不知道你为什么要在这里嘲笑 IMyViewModel
。你说你想测试在MyViewModel
.
中执行命令时是否调用了SomeOtherMethod
你不应该在这里嘲笑 MyViewModel
。
[TestMethod]
public void MyViewModel_OnMyCommand_CallsSomeOtherMethodOnModel()
{
var model = Substitute.For<IMyModel>();
var viewModel = new MyViewModel(model);
viewModel.MyCommand.Execute(null);
model.Received().SomeOtherMethod();
}
P.S:我对nsubstitute不熟悉。但是这个想法仍然是一样的(你不应该嘲笑 MyViewModel)。确保您在 nsubstitute 中使用了正确的方法。
我有以下 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 方法是否被调用?
不知道你为什么要在这里嘲笑 IMyViewModel
。你说你想测试在MyViewModel
.
SomeOtherMethod
你不应该在这里嘲笑 MyViewModel
。
[TestMethod]
public void MyViewModel_OnMyCommand_CallsSomeOtherMethodOnModel()
{
var model = Substitute.For<IMyModel>();
var viewModel = new MyViewModel(model);
viewModel.MyCommand.Execute(null);
model.Received().SomeOtherMethod();
}
P.S:我对nsubstitute不熟悉。但是这个想法仍然是一样的(你不应该嘲笑 MyViewModel)。确保您在 nsubstitute 中使用了正确的方法。