Автоматический тест для экспорта в Excel

#c# #unit-testing #testing

#c# #модульное тестирование #тестирование

Вопрос:

У меня есть простой метод, который принимает IEnumerable объекта и экспортирует его в виде книги Excel. Объект может быть чем-то вроде student (если использовать классический пример).

 public class Student 
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int StudentId { get; set; }
}
  

И затем метод, который мне нужно протестировать

 public void ExportStudents(IEnumerable<Student> students)
{
    // This method will save the students to an Excel workbook with a known name
    ...
}
  

Я хотел бы провести какой-то тест этого, но лучшее, что я могу придумать, — это консольное приложение, которое вы можете запускать вручную, что-то вроде этого:

 public void Main() 
{
    var students = new List<Student>
    {
        { Name = "John Doe", Age = 19, StudentId = 1 }, 
        { Name = "Max Power", Age = 21, StudentId = 2 },
        ...etc
    }

    // Export the list as a workbook
    WorkbookExporter.ExportStudents(students);
}
  

А затем проверьте книгу вручную. Но это кажется очень медленным и примитивным способом тестирования. Как вы можете протестировать что-то подобное — или, если взять другой пример, что-то, отправляющее электронное письмо, — более разумным способом?

Комментарии:

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

2. @kosist вы бы рассматривали это как модульный тест? Я думаю, что 1) Он слишком медленный для запуска. 2) Он имеет внешние зависимости (Excel)

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

4. @kosist итак, что-то вроде создания отдельного проекта (в дополнение к проекту для модульного тестирования) с помощью NUnit и использования его для тестов более высокого уровня?

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