Модульное тестирование IExtension <OperationContext>для использования со службой WCF - PullRequest
3 голосов
/ 18 мая 2010

Я пытаюсь разработать расширение (IExtension<OperationContext>) для System.ServiceModel.ObjectContext с использованием TDD. Расширение должно использоваться в качестве хранилища для пожизненного менеджера, который будет использоваться с Виндзорским замком.

Проблема заключается в абстрагировании (насмешке) от OperationContext. Поскольку это статический объект, который создается автоматически во время выполнения, я не знаю, как его смоделировать (без TypeMock, которого у меня нет).

OperationContext может быть обновлен, если я предоставлю объект канала, который реализует IChannelFactory, однако - этот интерфейс пугающе сложен, и я не знаю, что мне нужно реализовать в заглушке, чтобы заставить его работать должным образом.

Размещение службы и ее вызов также не заполняют OperationContext ...

[TestFixtureSetUp]
    public void FixtureSetup()
    {
        _serviceHost = new TypeResolverServiceHost(typeof(AilDataService));
        _serviceHost.AddServiceEndpoint(typeof (IAilDataService), new BasicHttpBinding(), SvcUrl);
        _serviceHost.Open();

        var endpointAddress = new EndpointAddress(SvcUrl);

        _ailDataService = ChannelFactory<IAilDataService>.CreateChannel(new BasicHttpBinding(), endpointAddress);
    }

    [TestFixtureTearDown]
    public void FixtureCleanup()
    {
        _serviceHost.Close();
    }

    [Test]
    public void Can_Call_Service()
    {
        var reply = _ailDataService.GetMovexProductData("169010", new TaskSettings{MovexDatabase = "MVXCDTATST", MovexServer = "SEJULA03"});

        Assert.That(reply, Is.Not.Null);

        // This fails
        Assert.That(OperationContext.Current!=null);
    }

Какие-нибудь советы?

1 Ответ

0 голосов
/ 24 мая 2010

Вот что я в итоге сделал:

    [TestFixture]
public class WcfPerSessionLifestyleManagerTests
{
    private const string SvcUrl = "http://localhost:8732/Design_Time_Addresses/JulaAil.DataService.WcfService/AilDataService/";

    private TypeResolverServiceHost _serviceHost;
    private ChannelFactory<IAilDataService> _factory;
    private IAilDataService _channel;
    private WindsorContainer _container;

    [Test]
    public void Can_Populate_OperationContext_Using_OperationContextScope()
    {
        using (new OperationContextScope((IContextChannel) _channel))
        {
            Assert.That(OperationContext.Current, Is.Not.Null);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...