2009-01-02 4 views
8

У меня есть приложение, которое использует службу WCF. Теперь я хотел бы добавить модульные тесты в приложение.Легкий способ издеваться над WCF-сервисом?

В некоторых случаях мне нужно высмеять службу WCF, так как получение желаемого поведения из службы иногда является жестким (например, служба вызывает особые исключения).

Я мог бы добавить еще один интерфейс к клиенту wcf, но это кажется немного глупым, поскольку клиентские вызовы уже используют интерфейс.

Есть ли простой способ издеваться над сервисом WCF? Легче создавать другой уровень интерфейса и перенаправлять каждый вызов WCF внутри него?

Edit: Большинство ответов, кажется, не знаю много о службе WCF с использованием, поэтому некоторые уточнения:
Для использования службы WCF из ViewModel, я должен управлять соединением что-то вроде этого:

ChannelFactory<IMyWcfService> channelFactory = new ChannelFactory<IMyWcfService>(""); 
IMyWcfService proxy = channelFactory.CreateChannel(); 
proxy.CallMyStuff(); 
proxy.Close(); 

Я не могу просто передать ViewModel прокси в WCF, так как соединение должно быть открыто и закрыто для каждой транзакции. По этой причине использование RhinoMock/NMock не будет работать, так как им нужен ViewModel, который получает прокси как параметр, который не может быть выполнен так, если вы используете WCF.

ответ

9

Почему вы не можете использовать что-то вроде NMock2, чтобы издеваться над интерфейсами IMyWcfService?

Если вам нужно создать новые экземпляры на лету, используйте Factory, чтобы скрыть ChannelFactory<IMyWcfService> от клиента. Таким образом, вы можете заменить завод, предоставляя клиенту тот, который создает вместо mocks вместо прокси.

+0

+1 на насмешливые интерфейсы напрямую. –

+0

, пожалуйста, укажите пример – PositiveGuy

+0

, что такое ChannelFactory? – PositiveGuy

2

Вы можете использовать любую насмешливую инфраструктуру, такую ​​как RhinoMocks или NMock, чтобы издеваться над контрактом интерфейса, поэтому, если ваша служба реализована в IMyService, вы можете использовать фальшивую фреймворк, чтобы установить ожидания на вызовы метода на этом интерфейсе. Если вы не знакомы с этой концепцией, вы можете просто создать объект stand-in, который реализует IMyService, но притворяется реальным сервисом во время тестирования. Таким образом, когда методы называются, они вызываются на ваш объект stand-in, и вы можете вернуть ваш stand-in все, что захотите.

+0

Использование RhinoMock/NMock Мне нужно будет открыть подключение к службе WCF, передать прокси-сервер в ViewModel и закройте его после использования. Поскольку соединения WCF обычно имеют короткий тайм-аут и должны быть открыты и закрыты для каждой транзакции, это не работает. – Sam

+0

Другими словами: вы не можете использовать RhinoMock/NMock для издевательства интерфейса WCF. По крайней мере, я не знаю, если вы знаете способ, пожалуйста, поделитесь им. – Sam