Удаленное модульное тестирование веб-сервиса в Visual Studio 2010 - PullRequest
4 голосов
/ 10 октября 2011

Мне нужно поменять мой модульный тест с локального на удаленный тест, и до сих пор я думал, что все, что мне нужно было сделать, это изменить UrlToTest, чтобы он указывал на другой сервер ... Но VS продолжает настаивать на создании веб-сервера разработки вместо используя тот, который уже запущен.

Итак, после прочтения некоторых документов мой вопрос на самом деле заключается в том, установить ли я Test Controller и Test Agent на удаленном и локальном компьютере или как? Что если WebService работает в Linux ...

Обратите внимание, что я не хочу отлаживать тестируемое приложение. Я просто хочу, чтобы тесты выполнялись для уже запущенного WebService, который развернут.

Я, вероятно, должен упомянуть, что все мои тесты состоят из вызовов WebService и некоторых проверок, подобных этой:

    [TestMethod()]
    [HostType("ASP.NET")]
    [AspNetDevelopmentServerHost("MainProjectName", "/")]
    [UrlToTest("http://servername:port/websitename/TestingOnlyWebForm.aspx")]
    public void LoginEmptyDataTest()
    {
        IUserService userService = CreateIUserService();
        string email = "";
        string password = "";
        ReturnMessage<User> actual;
        actual = userService.Login(email, password);
        Assert.AreNotEqual(true, actual.Status);
        Assert.AreNotEqual("db_error", actual.Info);
    }

Но у меня есть и более сложные тесты, в которых я изменяю некоторые данные и отправляю их в другой WebService и т. Д.

Обратите внимание, что ранее UrlToTest указывал на localhost, в какой момент он работает, но запускает сервер разработчика, а это не то, что мне нужно.

Ответы [ 4 ]

3 голосов
/ 21 октября 2011

То, что вы пытаетесь сделать, невозможно.Все, что пытается создать сгенерированный модульный тест, - это запустить тест локально на машине, либо используя сервер разработки, указав AspNetDevelopmentServerHost, либо используя local IIS, когда AspNetDevelopmentServerHost отсутствует.Если вы хотите протестировать удаленные сервисы, щелкните правой кнопкой мыши на вашем модульном тестовом проекте и добавьте сервисную ссылку.Укажите ваш сервис, дайте ему пространство имен, скажем, Services, и сгенерируйте прокси.Как только у вас будут созданы прокси, просто создайте их экземпляр и вызовите методы.Также удалите все ненужные атрибуты из вашего теста.Ваш тест должен выглядеть примерно так:

     [TestMethod]
        public void LoginEmptyDataTest()
        {
            using (var userServiceClient = new Services.UserServiceClient(
                                        "BasicHttpBinding_IUserService", 
                                        "http://someremotehost/userservice.svc"))
            {
                var result = userServiceClient.Login("user", "password");

                // asserts go here
            }
        }

Это может решить вашу непосредственную проблему, однако вам следует переосмыслить то, что вы делаете, как сказал @eglasius.что произойдет, если вызываемый вами код внутренне изменит состояние?Следующий тест может провалиться из-за этого, поэтому вам нужны стратегии очистки, иначе ваши тесты будут очень хрупкими, и в итоге вы их проигнорируете.

Обновление : передача адреса во время выполнениявремя.Измените первый параметр на любое имя конфигурации enpoint, которое вы указали в файле конфигурации.

0 голосов
/ 11 октября 2011

Вы можете отключить запуск узла службы в настройках проекта своего проекта службы WCF.Щелкните правой кнопкой мыши - Параметры WCF - снимите флажок «Запуск узла службы WCF при отладке другого проекта в том же решении».

0 голосов
/ 20 октября 2011

Вы действительно должны учитывать природу того, чего вы пытаетесь достичь здесь.

Трудно точно сказать, что вы нажимаете на код.У меня сложилось впечатление, у вас есть веб-сайт, который вызывает веб-сервис.В этом контексте вы тестируете клиентский код, а не просто тестируете сервис.

Если это так, удалите атрибуты и укажите URL-адрес нужного сервиса, как вам подсказал UrbaEsc.Если вы не удаляете атрибуты, вы запускаете вызывающий код в контексте сайта.

Даже если вышеупомянутое не является сценарием и основано на том, что вы ответили на UrbanEsc в комментариях,Затем вы будете тестировать внешний вызов веб-службы, инициированный тем же процессом сайта.

Вы сказали: «Нашел, но VS все еще что-то запускает на локальном хосте, а затем пытается связаться с внешним сервером ... Похоже, VS просто не предназначен для реального удаленного тестирования веб-сервисов»

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

Обратите внимание, что то, что вы делаете, это не модульные тесты, это интеграционные тесты.Или, в зависимости от области применения вашей системы, выполните полные системные тесты.

0 голосов
/ 11 октября 2011

В этом случае я сделаю удар в темноте, потому что недавно сделал что-то похожее.

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

Чтобы решить эту проблему - хотя это можно игнорировать - переместите контракты в новый проект.Затем попросите сервисные и тестовые проекты ссылаться на новый проект и удалите ссылочные тестовые проекты на сервис.

Надеюсь, что это имеет смысл!

Как только ссылка будет удалена, VS больше не будет чувствовать необходимость запуска службы при запуске тестов.

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