Проблема с поддельной службой WCF - PullRequest
1 голос
/ 16 февраля 2011

У меня есть некоторые проблемы с поддельными службами WCF:

1) Я объявляю класс с пустыми методами, который реализует только мой интерфейс службы:

public class MyFakeService : IMyService {
   ...
   public virtual MyResult GetResult(MyResponse response){
      throw new NotImplementedException();
   };
}

2) У меня есть класс MyResponse:

public class MyResponse {
      public long myField;
   }

3) Я создаю макет класса сервиса и хоста сервиса для размещения этого фальшивого сервиса:

myFakeService = mocks.StrictMock<MyFakeService>();
ServiceHost host = new ServiceHost(myFakeService);

(здесь я опустил конфигурацию конечной точки и т. Д.)

4) А теперь я пытаюсь проверить мой клиент. Метод client.GetSomethingFromService() точно вызывает метод GetResult(MyResponse) службы.

With.Mocks(mocks)
    .Expecting(() => Expect
        .Call(myFakeService.GetResult(null))
        .IgnoreArguments()
        .Constraints(PublicField.Value("myField", 777))
        .Return(new MyResult()))
    .Verify(() => myClient.GetSomethingFromService());

Проблема в том, что если что-то не так в сервисе, я вижу только что-то вроде этого:

System.ServiceModel.CommunicationObjectFaultedException: 
 The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used
 for communication because it is in the Faulted state.

Откуда мне знать, что именно не так? Может быть, проверка аргументов не выполнена или что-то еще ...?

Спасибо.

1 Ответ

1 голос
/ 29 июля 2011

Во-первых, избегайте использования строгих издевательств.Это плохая практика, потому что они делают ваши тесты слишком хрупкими.

Во-вторых, если вы тестируете сервис WCF, вам не нужно раскручивать ServiceHost, поскольку тогда вы будете выполнять интеграционный тест.Вы просто хотите протестировать логику своего сервиса, а не инфраструктуры WCF.

Чтобы узнать, как использовать сервисы RhinoMocks и WCF, посмотрите мой пост в блоге о модульном тестировании WCFуслуги

...