Технология Стек: .NET 4, C#, NUnitTDD: Возможно ли иметь интеграционные тесты, но нет модульных тестов?
Я пытаюсь применить тестовую разработку к новому проекту, который выполняет обработку изображений. У меня есть базовый класс, который содержит общие методы ввода/вывода файлов и подклассы, которые выполняют различные конкретные алгоритмы обработки. Насколько я понимаю, модульные тесты не затрагивают файловую систему или другие объекты и не приукрашивают поведение там, где это происходит. Мой базовый класс содержит только простые аксессоры и простые вызовы ввода/вывода файловой системы.
public class BaseFile
{
public String Path { get; set; }
public BaseFile()
{
Path = String.Empty;
}
public BaseFile(String path)
{
if (!File.Exists(path))
{
throw new FileNotFoundException("File not found.", path);
}
Path = path;
}
}
Есть ли какая-либо ценность при тестировании этих методов? Если да, то как я мог абстрагировать вызовы в файловую систему?
Другой вопрос - как проверить подкласс, который относится к типу файла изображения (~ 200 МБ). Я искал сайт и нашел similarquestions, но никто не имеет дело с размерами файлов, с которыми я работаю в этом проекте. Возможно ли, чтобы класс имел интеграционные тесты (используя «золотой файл»), но никаких модульных тестов? Как я могу строго следовать методам TDD и сначала написать неудачный тест в этом случае?
Если TDD трудно применять или неадекватно, не применяйте его. Это не серебряная пуля. – CharlesB
@CharlesB, я согласен. К сожалению, это чувство часто используется как оправдание для того, чтобы не использовать TDD, когда это действительно так и выгодно. Иногда есть большая кривая или много работы, но это обычно окупается. –
@CharlesB Не уверен, что я согласен с этим. Проблема в том, что тогда этот класс, который выполняет некоторую работу, не проверяется, и поэтому ваша уверенность в его изменении уменьшается. Проблема в том, что его непросто издеваться над статическими методами в System.IO, но это не значит отказаться от тестирования, это просто означает, что вам нужно сделать немного больше работы, чтобы сделать их проверяемыми. Вот почему MS представляет System.Web.HttpContextBase, чтобы решить проблемы, не имея возможности высмеять HttpContext. Нам не нужно тестировать httpContext, только что наш код правильно взаимодействует с ним. – Andy