Как я могу макет загрузки файла в c#? - PullRequest
0 голосов
/ 08 января 2020

Я написал код для загрузки файла в облачное хранилище. Этот код состоит из метода post, который принимает файл в формате: multipart / form-data и загружает его в облако. Так как же написать тестовый пример для того же? Чтобы указать c, как издеваться над этим файлом поста.

Используется формат formfile Код находится в asp. net core 3.1 с использованием c#.

Ответы [ 2 ]

1 голос
/ 08 января 2020

В компаниях, где я работал, «издевательства» никогда не видели слишком хорошо.

Обычно написание тестовой реализации работает лучше:

public interface IUploader
{
    IResult Upload(string filePath);
}

public sealed class FileUploader
{
    IResult Upload(string filePath) { ... } // method is implemented as expected
}

public sealed class TestUploader //this is placed in a specific folder for test implementations
{
    public IResult ExpectedResult { get; set; } = Result.Success();
    IResult Upload(string filePath) => ExpectedResult;
}

Чтобы связать его с вашим классом, проверьте Шаблон проектирования смиренного объекта . В нем объясняется, как извлечь тестируемые логи c из явно не тестируемых классов.

void UploadToCloud(string filePath) 
{
    ...
    Uploader.Upload(filePath); // real implementation in production code, test implementation during unit testing.
    ...
}

Я бы предпочел пойти по этому пути по нескольким причинам:

  • Изменение производственного кода заставляет вас также изменить реализацию теста. При использовании Mock вы рискуете не заметить, что ваши тесты устарели.
  • Реализация теста дает вам больше свободы (то есть вы можете передать результат теста реализации теста в части инициализации теста, чтобы проверить крайние случаи).
  • Это чище, чем издевается, и другие разработчики могут лучше понять, что происходит. Чем аккуратнее код, тем легче поддерживать его в чистоте.
  • У вас все еще есть некоторые ограничения, заданные интерфейсом. Иногда классы Mock просто превращаются в огромных монстров, которые больше не похожи на оригинальный класс.

ПРИМЕЧАНИЕ : если вы хотите протестировать принимающую часть, вы можете использовать ту же стратегию , Ваша тестовая реализация будет содержать ожидаемое содержимое файла для проверки ответа облака.

1 голос
/ 08 января 2020

Я предлагаю использовать абстракцию здесь, вы должны создать интерфейс, подобный Below -

Public Interface IFileSystem{
 bool uploadFile(FileStrem fileContent);
}

, а затем записать реализацию вашего облака, специфицированную c, в производном от класса выше и

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

...