Лучший способ макетировать внешние веб-сервисы при тестировании веб-приложения в разработке

В настоящее время я работаю над приложением, которое зависит от множества внешних веб-сервисов. Вот некоторые из них: authorize.net и chargify.

При тестировании (ручном тестировании) вещей, отличных от интеграции с этими веб-сервисами, я заменяю эти зависимости веб-сервисов поддельными их версиями, которые на самом деле ничего не делают. На данный момент я делаю это с помощью следующей строки кода в классе реестра карты структуры:

    For<IChargifyService>().Use<MockChargifyService>(); //uncomment this line to use a mock chargify service

У меня есть аналогичные строки в реестре для других поддельных сервисов. Я комментирую их при развертывании, чтобы в продакшене использовались настоящие сервисы. Настоящая и поддельная реализации сервиса присутствуют в сборке Infrastructure.

Проблема с этим подходом заключается в том, что я должен не забыть раскомментировать строки перед развертыванием. Я знаю, что есть способ сделать это с помощью Structure Xml Config, но мне было интересно, есть ли лучший способ сделать это. Было бы хорошей идеей создать сборку Mock Infrastructure?


person Khaja Minhajuddin    schedule 10.05.2010    source источник


Ответы (2)


Есть несколько способов, о которых я могу думать:

1) Вы можете создать отдельную сборку, как вы предложили, которая содержит все ваши фиктивные реализации. Вы также должны включить реестр в эту сборку, который устанавливает фиктивные реализации по умолчанию. Реестр в вашей основной сборке должен будет выполнить сканирование, чтобы опционально загрузить вашу фиктивную сборку - что-то вроде:

Scan(x =>
{
    x.TheCallingAssembly();
    x.AssembliesFromApplicationBaseDirectory();
    x.LookForRegistries();
});

2) Другой вариант — создать профиль для своих моков:

Profile("Test", x =>
{
    x.For<IChargifyService>().Use<MockChargifyService>();
    // etc.
});

Затем где-то в вашем приложении вы бы назвали:

ObjectFactory.Profile = "Test";

на основе некоторых условий окружающей среды, указывающих на то, что вы находитесь в тестовом режиме.

person Joshua Flanagan    schedule 10.05.2010
comment
Спасибо :) Я думаю использовать вариант профиля, он выглядит как наиболее гибкий вариант. - person Khaja Minhajuddin; 11.05.2010

Взгляните на интерфейс Soap (Начало работы).

person Taylor Leese    schedule 10.05.2010