Обеспечение сервисного подключения - PullRequest
4 голосов
/ 15 июня 2011

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

http://abc-efg/xyz.svc

Теперь мне нужно написать модульный тест для подключения к этому URI, и, если он работает, просто зарегистрировать успех, а если не получится, зарегистрировать ошибку и исключения / ошибки в файле.Нет необходимости в отдельном хостинге и т. Д.

Какими были бы идеальные методология и методы для вызова и достижения этой цели?

Ответы [ 4 ]

3 голосов
/ 15 июня 2011

Это то, что мы используем в наших тестах, которые подключаются к серверу WCF. Мы явно не проверяем, работает ли сервер, но, очевидно, если это не так, мы получаем ошибку:

[Test]
public void TestServerIsUp()
{
    var factory = new ChannelFactory<IMyServiceInterface> (configSectionName);
    factory.Open ();
    return factory.CreateChannel ();
}

если конечная точка не прослушивает конечную точку, указанную в конфигурации, вы получите исключение и неудачный тест.

Вы можете использовать одну из других перегрузок конструкторов ChannelFactory для передачи фиксированной привязки и адреса конечной точки, а не использовать config, если хотите.

3 голосов
/ 15 июня 2011

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

Вот NUnit TestFixture, который я настроил для запуска этого. Обратите внимание, что это было сделано довольно быстро и, безусловно, может быть улучшено ....

Я использовал объект WebRequest, чтобы сделать запрос и получить ответ обратно. Когда запрос сделан, он заключен в try...catch, потому что, если запрос возвращает что-либо, кроме ответа типа 200, он выдаст исключение WebException. Поэтому я ловлю исключение и получаю объект WebResponse из свойства Response исключения. Я установил свою переменную StatusCode в этой точке и продолжаю оценивать возвращаемое значение.

Надеюсь, это поможет. Если я неправильно понимаю ваш вопрос, пожалуйста, дайте мне знать, и я буду обновлять соответственно. Удачи!

ИСПЫТАТЕЛЬНЫЙ КОД:

[TestFixture]
public class WebRequestTests : AssertionHelper
{
    [TestCase("http://www.cnn.com", 200)]
    [TestCase("http://www.foobar.com", 403)]
    [TestCase("http://www.cnn.com/xyz.htm", 404)]
    public void when_i_request_a_url_i_should_get_the_appropriate_response_statuscode_returned(string url, int expectedStatusCode)
    {
        var webReq = (HttpWebRequest)WebRequest.Create(url);
        webReq.Method = "GET";
        HttpWebResponse webResp;
        try
        {
            webResp = (HttpWebResponse)webReq.GetResponse();

            //log a success in a file
        }
        catch (WebException wexc)
        {
            webResp = (HttpWebResponse)wexc.Response;

            //log the wexc.Status and other properties that you want in a file
        }

        HttpStatusCode statusCode = webResp.StatusCode;
        var answer = webResp.GetResponseStream();
        var result = string.Empty;

        if (answer != null)
        {
            using (var tempStream = new StreamReader(answer))
            {
                result = tempStream.ReadToEnd();
            }
        }

        Expect(result.Length, Is.GreaterThan(0), "result was empty");
        Expect(((int)statusCode), Is.EqualTo(expectedStatusCode), "status code not correct");
    }
}
1 голос
/ 15 июня 2011

Для этого можно использовать возможность модульного тестирования в Visual Studio.Вот пример

http://blog.gfader.com/2010/08/how-to-unit-test-wcf-service.html

0 голосов
/ 15 июня 2011

Пример WCF и модульного тестирования с Nunit

Здесь также является аналогичным вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...