Непрерывная интеграция - тестирование

Одна из ключевых особенностей непрерывной интеграции - гарантировать, что on-going testingсодержит весь код, созданный CI-сервером. После того, как CI-сервер выполняет сборку, необходимо убедиться в наличии тестовых примеров для тестирования необходимого кода. Каждый CI-сервер имеет возможность запускать модульные тесты как частьCI suite. В.Net, модульное тестирование - это функция, встроенная в .Net framework и то же самое можно включить в CI-сервер.

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

Для этого мы должны с особой тщательностью выполнять следующие шаги.

Step 1- Давайте добавим в наше решение новый класс, который будет использоваться в нашем модульном тесте. У этого класса будет переменная имени, которая будет содержать строку «Непрерывная интеграция». Эта строка будет отображаться на веб-странице. Щелкните правой кнопкой мыши простой проект и выберите пункт меню.Add → Class.

Step 2 - Дайте название классу как Tutorial.cs и нажмите кнопку «Добавить» внизу экрана.

Step 3- Откройте файл Tutorial.cs и добавьте в него следующий код. Этот код просто создает строку с именемName, а в Конструкторе присвойте имя строковому значению как Continuous Integration.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Simple {
   public class Tutorial {
      public String Name;
      public Tutorial() {
         Name = "Continuous Integration";
      }
   }
}

Step 4 - Давайте внесем изменения в наш Demo.aspx.csфайл, чтобы использовать этот новый класс. Обновите код в этом файле следующим кодом. Итак, этот код теперь создаст новый экземпляр класса, созданного выше.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Simple {
   public partial class Demo : System.Web.UI.Page {
      Tutorial tp = new Tutorial();
      protected void Page_Load(object sender, EventArgs e) {
         tp.Name = "Continuous Integration";
      }
   }
}

Step 5 - В нашем demo.aspx файл, давайте теперь обратимся к tp.Name переменная, созданная в aspx.cs файл.

<%@ Page Language = "C#" AutoEventWireup = "true" 
   CodeBehind = "Demo.aspx.cs" Inherits = "Simple.Demo" %>
<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
   
   <head runat = "server">
      <title>TutorialsPoint1</title>
   </head>
   
   <body>
      <form id = "form1" runat = "server">
         <div>
            <% = tp.Name%>)
         </div>
      </form>
   </body>
   
</html>

Чтобы убедиться, что наш код отлично работает с этими изменениями, вы можете запустить код в Visual Studio. После завершения компиляции вы должны получить следующий результат.

Step 6- Теперь пора добавить в проект наши модульные тесты. Щелкните правой кнопкой мыши наSolution и выберите пункт меню Add → New Project.

Step 7 - Перейдите к Test и с правой стороны выберите Unit Test Project. Дайте имя какDemoTest а затем нажмите ОК.

Step 8 - В вашем Demo Test project, вам необходимо добавить ссылку на проект Simple и на необходимые testing assemblies. Щелкните проект правой кнопкой мыши и выберите пункт меню.Add Reference.

Step 9 - На следующем появившемся экране перейдите в Projects, выберите Simple Reference и нажмите ОК.

Step 10 - Щелкните Add Reference снова перейдите в Сборки и введите Webв поле поиска. Затем добавьте ссылку наSystem.Web.

Step 11 - В Unit Test fileдобавьте следующий код. Этот код гарантирует, что у класса Tutorial есть переменная строкового имени. Он также подтвердит тот факт, что Имя должно равняться значению «Непрерывная интеграция». Это будет наш простой тестовый пример.

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Simple;

namespace DemoTest {
   [TestClass]
   public class UnitTest1 {
      [TestMethod]
      public void TestMethod1() {
         Tutorial tp = new Tutorial();
         Assert.AreEqual(tp.Name, "Continuous Integration");
      }
   }
}

Step 12- Теперь давайте запустим наш тест в Visual Studio, чтобы убедиться, что он работает. В Visual Studio выберите пункт менюTest → Run → All Tests.

После запуска теста вы увидите, что тест успешно запущен в левой части Visual Studio.

Включение непрерывного тестирования в TeamCity - Теперь, когда все тестовые примеры готовы, пришло время интегрировать их в наш сервер Team City.

Step 13- Для этого нам нужно создать шаг сборки в нашей конфигурации проекта. Перейдите на главную страницу своего проекта и щелкните Изменить параметры конфигурации.

step 14 - Затем перейдите к Шагу сборки → Сборка MS и нажмите Добавить шаг сборки, как показано на следующем снимке экрана.

На следующем появившемся экране добавьте следующие значения -

  • Выберите тип бегуна как Visual Studio Tests.

  • Введите необязательное имя шага теста.

  • Выберите тип Test Engine как VSTest.

  • Выберите версию Test Engine как VSTest2013.

  • В имени тестовых файлов укажите расположение как DemoTest\bin\Debug\DemoTest.dll - Помни это DemoTestэто название нашего проекта, который содержит наши модульные тесты. ВDemoTest.dll будет сгенерирован нашим первым шагом сборки.

  • Щелкните Сохранить, который будет доступен в конце экрана.

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

Step 15- Теперь пришло время зарегистрировать весь ваш код в Git, чтобы можно было запустить весь процесс сборки. Единственная разница в том, что на этот раз вам нужно запуститьgit add а также git commit команда из Demo parent folder как показано на следующем снимке экрана.

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

Step 16 - Если вы нажмете на результат «Тест пройден» и перейдете на вкладку «Тест», вы увидите, что UnitTest1 был выполнен и успешно пройден.