代码之家  ›  专栏  ›  技术社区  ›  Larsi

RhinoMock帮助:模拟WCF服务

  •  4
  • Larsi  · 技术社区  · 15 年前

    我想用犀牛模型来模拟WCF服务。

    假设我有以下服务:

        [OperationContract]
        List<User> SearchUsers(UserSearchFilter filter);
    

    将此服务与Visual Studio一起添加将生成代理,并且该代理具有如下接口:

     public interface ResourceService {
    
        System.IAsyncResult BeginSearchUsers(UserSearchFilter filter, System.AsyncCallback callback, object asyncState);
    
        ObservableCollection<User> EndSearchUsers(System.IAsyncResult result);
    }
    

    然后我创建一个使用此服务的视图模型,如下所示:

            private ResourceService service;
        public ViewModelBase(ResourceService serv)
        {
            service = serv;
            var filter = new UserSearchFilter();
            service.BeginSearchUsers(filter, a =>
            {
                this.Users = service.EndSearchUsers(a); 
            }, null);
        }
    

    然后问题来了。我如何用犀牛模型来模拟这项服务?

           [TestMethod]
        public void UserGetsPopulatedOnCreationOfViewModel()
        {
            // Is stub the right thing to use?
            ResourceService serv = MockRepository.GenerateStub<ResourceService>();
    
            // Do some setup... Don't know how?
            var vm = new ViewModel(serv);
    
            Assert.IsTrue(vm.Users.Count > 0);
        }
    

    如果有人能帮助我正确使用犀牛模型,我真的很高兴

    (注意:我正在使用Silverlight,但我认为这不会改变犀牛模型的使用方式)

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  4
  •   Brian Genisio    15 年前

    我写了一篇 4-part article 关于测试使用WCF服务的应用程序。

    Part 2 谈论使用犀牛模型模拟服务

    Part 3 讨论使用moq模拟异步服务

    注意第3部分可以很容易地翻译成犀牛模型。我只是想展示不同的模拟框架,这种技术并不依赖于模拟框架。

    希望它有帮助!

    编辑 所以,在Rhino Mocks中,您在设置中执行此操作:

    mockService.YourEvent += null;
    IEventRaiser loadRaiser = LastCall.IgnoreArguments().GetEventRaiser();
    

    然后在回放中,您执行以下操作:

    loadRaiser.Raise(mockService, CreateEventArgs());
    

    您可以在中找到有关Rhino模拟活动的更多信息 Phil Haack's blog post .

        2
  •  1
  •   Jarek Kardas    15 年前

    我将创建该服务将实现的接口(IResourceService)。 然后在Silverlight端创建调用WCF服务本身的IResourceService的自定义实现。

    Rihnomock将为IResourceService接口创建存根,而不是为WCF服务创建存根。

    使用Prism 2非常容易,您可以在这里阅读更多内容:

    http://mokosh.co.uk/post/2009/04/19/prism-2-wpf-and-silverlight-services/