Модульное / интеграционное тестирование FTP доступа - PullRequest
10 голосов
/ 10 июня 2011

Член моей команды пишет приложение для доступа к внешнему FTP-сайту для загрузки файлов.Написав код, мы хотели бы иметь возможность проводить интеграционное тестирование без использования физического ftp-сервера, поскольку это внешний сайт.

В прошлом мы делали подобные вещи, используя nDumpster длясимуляция сервера smtp в коде, и мы задаемся вопросом есть ли какие-либо равноправные совместимые ftp-серверы, которые можно использовать?Следует добавить, что это не для настоящих модульных тестов, у нас они есть, и мы высмеиваем нашу реализацию ftp.

Однако мы используем WebFtpRequest.Create () в реальной реализации интерфейса.Таким образом, для тестирования этого кода требуется реальный сервер (если мы не зарегистрируем наш собственный протокол в тестах), в конце концов нам придется тестировать на реальном сервере !.

Мы хотим иметь возможность запускать и останавливать ftp-сервер в коде (так же, как вы можете nDumpster) и проверять правильность наших вызовов.

Ответы [ 4 ]

6 голосов
/ 05 июля 2011

Мне просто нужно было что-то похожее, и я нашел решение, основанное на маленьком FTPDMIN FTP-сервере командной строки.Вы можете найти мое решение здесь: https://github.com/Buthrakaur/FtpIntegrationTesting

3 голосов
/ 10 июня 2011

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

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

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

2 голосов
/ 10 июня 2011

Вы должны представить интерфейс для вашего класса FtpService следующим образом:

interface IFtpService
{
    byte[] Download(string fileName);
    bool Upload(byte[] data);
}

Реализовать этот интерфейс:

public class FtpService: IFtpService
{
    //public byte[] Donload implementation goes here
    //public bool Upload(byte[] data) implementation goes here

}

На своих юнит-тестах вы должны использовать Mocks, чтобы высмеивать IFtpService и играть с ним: создавать свои ожидания, создавать ожидания для общих исключений Ftp и т. Д.

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

1 голос
/ 02 ноября 2016

Вы можете включить Rebex FileServer в свой проект или модульные тесты, он поддерживается на многих платформах, включая .NET

Небольшое руководство можно найти на используя блог Rebex

Это не бесплатно, и я никоим образом не связан.

РЕДАКТИРОВАТЬ: Я впоследствии обнаружил это восхитительный FTP-сервер для бедных, включающий исходный код (лицензия MIT).

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