Как создать интеграционные тесты для больших проектов - PullRequest
1 голос
/ 12 октября 2019

Мы создали общий доступ к P2P в c #, и я хочу провести несколько интеграционных тестов, которые проверяют, например, правильно ли загружен файл с отправителя, и проверяют размер, скорость и т. Д.

Я попытался отправить файла затем проверил, но я не могу проверить этот файл без запуска программы.

Есть идеи, как создать тесты для проверки данных?

1 Ответ

1 голос
/ 12 октября 2019

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

Я предполагаю, что вы хотите запустить интеграциютестирование в автоматическом режиме. По сути, вы можете просто запустить тест с уже используемой платформой модульных тестов (например, NUnit), и при создании необходимых сервисов вы не используете никакие макеты, а вводите фактические зависимости.

Как именно вы настраиваете «фрейм» интеграционного теста, зависит от вашего проекта, например, если вы используете библиотеку IoC для внедрения зависимостей, вы можете использовать ее и в интеграционных тестах, а нечем настраивать свои сервисы вручную.

Вы также должны быть осторожны, так как тот факт, что когда вы запускаете интеграционные тесты, может повлиять на систему, на которой вы работаете. Поэтому, если вы что-то делаете в файловой системе, рекомендуется выполнить очистку после теста.
Я бы порекомендовал создать некоторую базовую «среду», подходящую вашему проекту для настройки интеграционных тестов, которая будет включатьуниверсальный код, необходимый для настройки тестов для запуска в вашей системе, и, возможно, для создания специальных папок во временном каталоге, которые будут удаляться после каждого запуска теста.

Теперь к вашему более конкретному вопросу: если я правильно понялвам нужно будет создать «отправителя», который предоставит тестовый файл, который вы хотите загрузить. В рамках теста вы можете развернуть этот тестовый файл в указанной выше временной папке и настроить отправителя для предоставления этого файла. Затем вы можете создать клиент, который будет взаимодействовать с этим отправителем, и загрузить файл куда-нибудь в вашей системе.

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

После некоторого псевдокода 1015 *, который может отображать общееконцепция:

[TestMethod]
[TestCategory("Integration")
public void DownloadFileFromSender_ConnectionDoesNotGetInterrupted_SuccessfullyDownloadsFile()
{
   // Arrange - do the setup of files and temp folders, make create sender and receiver
   SetupTestFile(@"Tempfolder\Testfile.txt");
   var sender = new Sender(...);
   var receiver = new Receiver(...);

   sender.ProvideFile(@"Tempfolder\Testfile.txt");

   // Act - Put your actual test here
   var timeBeforeDownload = DateTime.Now;
   receiver.DownloadFile(sender, @"Tempfolder\Testfile.txt", @"Tempfolder\DownloadedFile.txt");
   var totalDownloadTime = DateTime.Now - timeBeforeDownload;

   // Assert - Verify here your assumptions, e.g. download time or file properties
   Assert.IsTrue(totalDownloadTime.TotalMilliseconds < 10000);
   Assert.IsTrue(File.Exists(@"Tempfolder\DownloadedFile.txt"));
}

Имейте в виду, что выполнение интеграционных тестов может занять больше времени для настройки и запуска в зависимости от размера / сложности тестируемых компонентов. Они не заменяют модульные тесты, а дополняют их. Из-за их различий также полезно пометить их, чтобы они могли выполнять либо модульные, либо интеграционные тесты.

Опять же, особенности настройки среды тестирования зависят от вас и сильно зависят от вашего проекта. Вы хотите проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...