RhinoMock help: Служба мошенничества в WCF - PullRequest
4 голосов
/ 30 апреля 2009

Я пытаюсь использовать RhinoMock для макетирования службы 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);
}

Затем я создаю ViewModel, который использует этот сервис, например:

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

Тогда возникает вопрос. Как мне издеваться над этим сервисом, используя RhinoMock?

       [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);
    }

Я был бы очень рад, если бы кто-то мог помочь мне с правильным использованием RhinoMock

(Примечание: я использую Silverlight, но не думаю, что это изменит способ использования RhinoMock)

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 30 апреля 2009

Я написал статью из 4 частей , посвященную тестированию приложений, использующих службы WCF.

Часть 2 рассказывает о том, как отключить сервис с помощью RhinoMocks

Часть 3 рассказывает о макете асинхронного сервиса с использованием Moq

Обратите внимание, что часть 3 может быть легко переведена в RhinoMocks. Я просто пытался показать разные фальшивые фреймворки, и этот метод не опирался на фальшивые фреймворки.

Надеюсь, это поможет!

EDIT Итак, в Rhino Mocks вы делаете это в настройках:

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

Затем при воспроизведении вы делаете это:

loadRaiser.Raise(mockService, CreateEventArgs());

Более подробную информацию о насмешливых событиях в Rhino можно найти в сообщении Фила Хаака в блоге .

1 голос
/ 30 апреля 2009

Я бы создал интерфейс, который бы реализовывал сервис (IResourceService). Затем на стороне Silverlight создайте пользовательскую реализацию IResourceService, которая сама вызывает службу WCF.

RihnoMock создаст заглушку для интерфейса IResourceService, а не для службы WCF.

Это очень легко сделать с помощью Prism 2, вы можете прочитать больше здесь:

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

...