Для подключения тестового фреймворка используется система менеджмента артефактов Conan, которая позволяет осуществлять подключение заранее скомпилированных библиотек без необходимости их установки на ОС разработчика. Подключение осуществляется описанием корректных настроек в файле conanfile.txt:
```
[requires]
gtest/cci.20210126
[generators]
cmake
```
Таким образом, будет подключена последняя на момент написания данного документа сборка фреймворка тестирования.
## sources
Исходные коды проекта разделены на две части: собственно исходники и включаемые файлы. Исходники - это код самой программы, использующей алгоритмы, описанные во включаемых заголовочных файлах.
### src/main.c
В файле с программой подключается файл с тестируемым алгоритмом, который используется в коде программы:
Тесты описываются в отдельном файле, из которого будет собран бинарный файл. Важно, что фреймворк работает только сС++11 или новее, поэтому использовать более старый стандарт не получится, а исходные файлы на С нужно включать в секции `extern "C"`. Каждый тест описывается в специальной макрофункции `TEST` в параметрах которой указывается детальное название теста. В данном примере будет использоваться только один ассерт - `EXPECT_EQ`, который проверяет значение переданной первым аргументом переменной на равенство второму аргументу
### tests/test.cpp
```C++
#include <gtest/gtest.h>
#include <iostream>
extern "C" {
#include "../includes/algos.h"
}
TEST(HelloTest, WeTestHere) {
char a = -11;
char b = 15;
swap(&a, &b);
EXPECT_EQ(a, 15);
EXPECT_EQ(b, -11);
}
TEST(AnotherTest, WeTestThere) {
char a = -11;
char b = -11;
swap(&a, &b);
EXPECT_EQ(a, -11);
EXPECT_EQ(b, -11);
}
```
## CMake
Сборщик CMake описывает правила, по которым будет сформировал Makefile для дальнейшей сборки утилитой GNU Automake или Ninja. В файл настроек необходимо включить строки подключения артефактов Conan, поскольку мы используем готовую сборку фреймворка тестирования, а не устанавливаем его на компьютер. Также в скрипте указывается два исполняемых файла - для сборки программы и тестов, соответственно.
Данная часть руководства рассматривается в случае, если собранные артефакты не предназначены под конфигурацию Вашей ОС. В качестве примера создаётся артефакт **GTest** под **MinGW**, который отсутствует на данный момент на офф репозиториях **conan center**.
* Инициализация репозитория в папке, где будет находиться скаченный с Интернета проект;
* Скачать **.zip git googletest**;
* Распаковать в папку, где инициализирован репозиторий;
* Создать проект на внутреннем **gitlab** и заремоутить;
* Теперь нужно создать проект тестирования артефакта, **conan** позволяет уже создать готовый **sample package recipe** для тестирования после сборки артефакта;
* Поменять во внешнем файле **conanfile(py)** в методе `source` команды `git clone` ссылку на соответствующий проект, а также следующие изменения в данном файле:
В методе `source` поменять название проекта и путь до CMakeLists.txt:
* После выполнения настроек **.py** файла можно выполнить - `conan create . testg/testing`;
* Затем, можно выполнить `upload` артефакта и использовать его по мануалу, который описан выше. Лабо можно использовать данный артефакт локально, conan автоматически вначале проверяет cache, и только потом обращается в remote, где указаны соответствующие ссылки (в нашем случае на Nexus).
Также хотелось бы упомянуть один нюанс. Если Вы загружаете уже собранный артефакт, убедитесь, что в файле conan'а настроек конфигураций не были сбиты пути в `[env]` разделе. Была ситуация, когда был загружен артефакт, собранный на ОС GNU Linux, и в данном файле изменились пути под вид данной ОС (C:\MinGW... -> /c/MinGW/).