В предишната публикация получихме нашите първи тестове, настроени с 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 г.