我在学犀牛
也不知道如何模拟工厂:我有一个IViewModelFactory接口,它是IOC使用的
public interface IViewModelFactory
{
T Create<T>() where T : IViewModel;
T Create<T>(int Id) where T : IViewModel;
}目前,我使用以下方法创建模拟:
var _viewModelFactory = MockRepository.GenerateStub<IViewModelFactory>();
viewModelFactory.Stub(x => x.Create<ViewModel1>())
.Return(new ViewModel1());ViewModel1是一个类,类似于:
public class ViewModel1:BaseViewModel,IViewModel
{
private int _id;
public int ID
{
get { return _id;}
set {
if (_id==value) return;
_id= value;
RaisePropertyChanged(()=>ID)
}
}
public ViewModel1()
{
ID=0;
}
public ViewModel1(int id)
{
ID=id;
}
}这也适用于
_viewModelFactory.Get<ViewModel1>();但是不知道如何创建Stub,比如:
_viewModelFactory.Get<ViewModel1>(25);这有可能被嘲笑吗?
发布于 2013-11-12 12:33:38
让我看看我是否理解你的问题。你有不同的解决方案:
如果您已经知道将要使用的Id,可以这样做:
var _viewModelFactory = MockRepository.GenerateStub<IViewModelFactory>();
var id = 1;
viewModelFactory.Stub(x => x.Create<ViewModel1>(id))
.Return(new ViewModel1(id));如果您不知道该id,但不关心将使用哪个id,因为您将始终使用相同的id返回视图模型,您可以这样做:
var _viewModelFactory = MockRepository.GenerateStub<IViewModelFactory>();
viewModelFactory.Stub(x => x.Create<ViewModel1>(0))
.IgnoreArguments()
.Return(new ViewModel1(10));如果您想使用您获得的id创建一个视图模型,即使您在定义测试时不知道它:
var _viewModelFactory = MockRepository.GenerateStub<IViewModelFactory>();
viewModelFactory.Stub(x => x.Create<ViewModel1>(Arg<int>.Is.Anything))
.Return(null)
.WhenCalled(x => {
var id = (int)x.Arguments[0];
x.ReturnValue = new ViewModel1(id);
});注意:我现在不能测试代码,但我认为它应该能工作!
https://stackoverflow.com/questions/19928941
复制相似问题