[БЕЗ_ЗВУКА] Мы с вами прошли большой путь разработки собственного фреймворка для написания юнит-тестов. Мы в процессе работы над ним посмотрели, как применять различные конструкции языка C++, такие как классы, деструкторы, шаблоны функций, как их применять для реальных практических задач и как с их помощью получать те свойства фреймворка, которые нам хотелось. И давайте сейчас сделаем обзор, посмотрим, что же у нас получилось, сделаем еще раз такой общий обзор нашего фреймворка для юнит-тестирования, который мы написали. Итак, какими свойствами он в итоге обладает? Во-первых, если у нас в одном из тестов срабатывает Assert, который выполняет проверку двух аргументов на равенство, то в консоль выводится значение, чему эти аргументы были равны. При этом это работает не только для простых типов, таких как целочисленные, но и для контейнеров: для map, для set. При этом мы рассматривали только AssertEqual, то есть проверку на равенство, но, естественно, несложным образом этот Assert расширяется на проверку на неравенство, на больше, на меньше и так далее. Если вам это понадобится, я думаю, вы без труда это добавите. Дальше. Вывод тестов не смешиваться с выводом основной программы. Это очень очень важное свойство, которое в итоге позволило нам выполнять наши тесты всегда при запуске программы и не комментировать их при отправке решения в тестирующую систему. Дальше. Если у нас упал хотя бы один юнит-тест наш фреймворк прекращает выполнение программы, и мы сразу видим, что у нас в программе есть ошибка. Она была найдена юнит-тестом. Если же все юнит-тесты успешно отработали, то мы переходим к выполнению основной программы и просто выполняем решение нашей основной задачи. В результате у нас получился удобный для использования фреймворк, который отчасти заточен под задания программирования на нашем курсе. Я думаю, с его помощью вы сможете тестировать и какие-то свои программы. Давайте вспомним, как пользоваться нашим фреймворком, который мы сделали. Вот у меня на экране изображен минимальный такой кусок кода, который нужно написать, чтобы воспользоваться нашим фреймворком. Нужно написать функцию TestAll — вы можете назвать, как вам больше нравится, просто я ее называю TestAll, — в которой объявить объект класса TestRunner. И функция TestAll должна идти самым первым вызовом внутри функции main, чтобы тесты выполнялись автоматически первым делом. Хорошо. Как нам в наш фреймворк добавить юнит-тест. Очень просто. Мы пишем функцию — в примере она названа TestSomething, опять же вы можете придумать для нее более подходящее название. И внутри этой функции мы, собственно, пишем код теста — мы выполняем какие-то проверки. Проверки мы выполняем с помощью вызова AssertEqual, который берет два значения, одно из которых наверняка будет переменной, и сравнивает между собой. Дальше мы эту функцию TestSomething вызываем с помощью метода RunTest класса TestRunner. И, собственно, нужно сделать, получается, два действия: написать сам юнит-тест и не забыть добавить его в вызов через RunTest в классе TestRunner. Таким образом, мы добавляем юнит-тест в наш фреймворк. Последнее, что хотелось бы сказать про наш фреймворк — это то, что мы выложим его код рядом с этим видео. И мы всячески призываем вас этот фреймворк использовать, изменять, улучшать, делать удобнее для вас самих. И мы, конечно же, дадим вам задач, где у вас не будет выбора — вам придется попользоваться нашим фреймворком.