В предишната публикация получихме нашите първи тестове, настроени с moq. И така, нека сега да видим как да създадем някои модулни тестове, които да вървят заедно с нашите WCF услуги.
Първото нещо, което трябва да направим, е да създадем нашата WCF услуга. Нищо особено, функциите по подразбиране, създадени с приложението WCF, трябва да са достатъчни. Първо добавете нов проект към решението RussUnitTestSample: Щракнете с десен бутон върху решение -› Добавяне -› Нов проект…
WCF -› Приложение за услуга Wcf. Наименуван RussUnitTestSample.Wcf
Вашият новодобавен проект трябва да изглежда подобно на:
След това ще искаме да конфигурираме нашия проект да има множество стартиращи проекти (както приложението на конзолата, така и услугата wcf), освен това ще добавим услугата WCF като референтна услуга в приложението на конзолата. Множество стартиращи проекти. Решение с десен бутон -› Свойства
Изберете множество стартиращи проекти, променете комбинираните полета, така че и конзолното приложение, и приложението wcf да са настроени на „старт“
Намерете порта, на който услугата WCF е настроена да работи след това. Щракнете с десния бутон върху WCF проекта -› свойства
Копирайте URL адреса, маркиран за използване в следващата стъпка
След това ще добавим WCF проекта като справка за услуга към конзолното приложение. В конзолното приложение щракнете с десния бутон върху „References“ -› Add Service Reference…
Поставете URL адреса, копиран преди (localhost:portNumber/) -› Открийте -› Разбийте в услугата и изберете своя интерфейс (IService1)
Вашият проект вече трябва да показва нова папка „Референции за услуги“ и да съдържа справката за услугата в списъка. Освен това забележете, че файлът ми app.config е изваден автоматично, тъй като е добавена информация за крайна точка на WCF.
Ето какво беше добавено към конфигурационния файл
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IService1" /> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:23336/Service1.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1" name="BasicHttpBinding_IService1" /> </client> </system.serviceModel>
Сега референтната ни услуга е добавена и готова, нека я тестваме! Променете Program.CS на конзолното приложение с:
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); Console.WriteLine("\n"); Console.WriteLine("{0}", client.GetData(42)); Console.WriteLine("\n");
Вашият program.cs сега трябва да изглежда така:
namespace RussUnitTestSample { class Program { #region consts const string CONNECTION_STRING = "Data Source=192.168.50.4,1515;Initial Catalog=MBES;Persist Security Info=True;Integrated Security=true;"; #endregion consts #region Entry static void Main(string[] args) { GetNumbersAndAddThem obj = new GetNumbersAndAddThem( new DbGetSomeNumbers(new BaseDbConnection(CONNECTION_STRING)), new NumberFunctions() ); Console.WriteLine("\n"); Console.WriteLine(obj.Execute()); Console.WriteLine("\n"); ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); Console.WriteLine("\n"); Console.WriteLine("{0}", client.GetData(42)); Console.WriteLine("\n"); } #endregion Entry } }
Пробвайте и:
Сега нашата WCF услуга е хоствана и успешно използвана в конзолното приложение. Разликите в предишния и текущия могат да бъдат намерени в GitHub, имайте предвид, че много файлове в заявката за изтегляне се генерират автоматично от услугата WCF.
След това ще разгледаме как да го тестваме.
Първоначално публикувано в kritner.blogspot.com на 21 декември 2015 г.