У нас на проектах мы пишем автоматизированные тесты для сайтов используя связку “Selenium WebDriver + C# + NUnit”. Обычно тесты с использованием NUnit пишут в виде библиотеки. Потом эти тесты запускаются с использованием специальной утилиты от разработчиков NUnit. Это же делали и мы. Однако в один из дней нам понадобилось писать тесты, которые будут содержаться в исполняемом файле. В итоге изучив данный вопрос я написал тесты, которые содержатся не в библиотеке DLL, а в исполняемом файле.

Сейчас расскажу, как можно писать тесты, которые после компиляции будут содержаться в консольном приложении. Это иногда удобно, так как не надо через командную строку запускать тесты из DLL используя утилиту от разработчиков NUnit. Хотя это не совсем так. Наш EXE будет в себе содержать ссылки на утилиты NUnit, но обо всё по порядку.

На текущий момент мной используется NUnit 3.5.

Для начала создадим в студии, в которой вы работаете, и не важно в какой, проект “Консольное приложение”. Называйте как хотите, размещайте где хотите:

После того как создали проект нам необходимо подключить к проекту “NUnit”, “NUnit Test Engine (NUnit.Engine)”, “NUnit Console Runner — Deprecated (NUnit.Runners)”. Обычно эти пакеты устанавливаются через NuGet. В Visual Studio в менеджере пакетов NuGet они выглядят так:

Я чаще всего их скачиваю и подключаю к проекту руками.

Далее в ссылки добавим “nunit3-console.exe”. Он обычно находится по пути:

ВАШ_ПРОЕКТ\packages\NUnit.ConsoleRunner*\tools\nunit3-console.exe

* — тут пишется номер версии.

После этого наполняем файл “Program.cs”. Я вам приведу готовый код, который можно вставить в “Program.cs” предварительно удалив всё что в нём есть. Не поленитесь сравнить то что было с тем, что стало:

using System;
using System.IO;
using NUnit.Framework;
using Selenium;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.PhantomJS;
using OpenQA.Selenium.Support.UI;
using System.Reflection;

namespace TESTING_SPACE
{
	[TestFixture]
	class Test
	{
		public static void Main(string[] args)
		{
			// это обязательно для корректной работы
			string path = Assembly.GetExecutingAssembly().Location; // требуется "using System.Reflection;"
			NUnit.ConsoleRunner.Program.Main(new[] { path });
		}

		[OneTimeSetUp] // вызывается перед началом запуска всех тестов
		public void TestFixtureSetUp()
		{
			// ТУТ КОД
		}

		[OneTimeTearDown] //вызывается после завершения всех тестов
		public void TestFixtureTearDown()
		{
			// ТУТ КОД
		}

		[SetUp] // вызывается перед каждым тестом
		public void SetUp()
		{
			// ТУТ КОД
		}

		[TearDown] // вызывается после каждого теста
		public void TearDown()
		{
			// ТУТ КОД
		}

		[Test]
		public void TEST_1()
		{
			// ТУТ КОД
		}

		[Test]
		public void TEST_2()
		{
			// ТУТ КОД
		}
	}
}

Названия «namespace TESTING_SPACE» и «class Test» можете менять так как вашей душе угодно. Возможно “using” в данном коде для вас будет многовато, но это я брал со своего рабочего проекта, в связи с этим явные ненужные вещи удалил и оставил только самое необходимое. Если вы не используете “Selenium WebDriver”, то вам можно удалить все “using”, в которых есть слово “Selenium”.

Все результаты тестов будут записываться автоматически в файл “TestResult.xml”, который будет создаваться рядом с вашим EXE. Как сформировать свой собственный отчёт я рассказал в одной из статей.