首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用参数嘲弄工厂

用参数嘲弄工厂
EN

Stack Overflow用户
提问于 2013-11-12 12:15:43
回答 1查看 2.1K关注 0票数 4

我在学犀牛

也不知道如何模拟工厂:我有一个IViewModelFactory接口,它是IOC使用的

代码语言:javascript
复制
public interface IViewModelFactory
{
  T Create<T>() where T : IViewModel;
  T Create<T>(int Id) where T : IViewModel;
}

目前,我使用以下方法创建模拟:

代码语言:javascript
复制
var _viewModelFactory = MockRepository.GenerateStub<IViewModelFactory>();
   viewModelFactory.Stub(x => x.Create<ViewModel1>())
                       .Return(new ViewModel1());

ViewModel1是一个类,类似于:

代码语言:javascript
复制
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;
  }
}

这也适用于

代码语言:javascript
复制
  _viewModelFactory.Get<ViewModel1>();

但是不知道如何创建Stub,比如:

代码语言:javascript
复制
  _viewModelFactory.Get<ViewModel1>(25);

这有可能被嘲笑吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-12 12:33:38

让我看看我是否理解你的问题。你有不同的解决方案:

如果您已经知道将要使用的Id,可以这样做:

代码语言:javascript
复制
var _viewModelFactory = MockRepository.GenerateStub<IViewModelFactory>();
var id = 1;
viewModelFactory.Stub(x => x.Create<ViewModel1>(id))
                   .Return(new ViewModel1(id));

如果您不知道该id,但不关心将使用哪个id,因为您将始终使用相同的id返回视图模型,您可以这样做:

代码语言:javascript
复制
var _viewModelFactory = MockRepository.GenerateStub<IViewModelFactory>();
viewModelFactory.Stub(x => x.Create<ViewModel1>(0))
                   .IgnoreArguments()
                   .Return(new ViewModel1(10));

如果您想使用您获得的id创建一个视图模型,即使您在定义测试时不知道它:

代码语言:javascript
复制
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);
                    });

注意:我现在不能测试代码,但我认为它应该能工作!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19928941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档