Создайте CSV-файл в качестве программы для чтения потоков "на лету"

StackOverflow https://stackoverflow.com/questions/2206633

  •  18-09-2019
  •  | 
  •  

Вопрос

Я хотел бы провести модульное тестирование следующего метода

public IEnumerable<T> GetData<T>(StreamReader fileStream) where T : new()

Программа streamreader должна представлять собой файл в формате CSV с определенными названиями столбцов.

Возможно ли создать такие файлы в коде, вместо того чтобы иметь их много в файловой системе для каждого модульного теста?

Есть какие-нибудь идеи?

Обновить:

только что понял, что библиотека, которую я использую Linq2Csv, имеет методы для выполнения именно этого

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

Это было полезно?

Решение

Конечно:

var buffer = Encoding.Default.GetBytes("ab;cd;ef");
using (var stream = new MemoryStream(buffer))
using (var reader = new StreamReader(stream))
{
    var actual = GetData<SomeClass>(reader);
    // TODO: assert on actual
}

Другие советы

В своем тесте вы могли бы передать метод a StreamReader это читается из MemoryStream вместо того, чтобы извлекать из файла или FileStream.Тот Самый MemoryStream в свою очередь, может быть заполнен содержимым, похожим на содержимое файла во время проведения тестирования.

В идеале измените подпись на:

public IEnumerable<T> GetData<T>(TextReader fileStream) where T : new()

Тогда вы можете пройти в StringReader действительно легко.

Альтернативы:

  • Включите файлы примеров в свою тестовую сборку, извлекайте потоки с помощью Assembly.GetManifestResourceStream() и создать StreamReader От этого
  • Использовать Encoding.GetBytes(text) и оберните результат в MemoryStream, затем создайте StreamReader поверх этого

Для коротких тестов я бы выбрал StringReader версия.Для получения дополнительных данных встраивание файла в тестовую сборку работает очень хорошо.

только что понял, что библиотека, которую я использую Linq2Csv, имеет методы для этого

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

хотя спасибо за ответы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top