При тестировании модулей всегда трудно понять, насколько низко вы придерживаетесь рамки.Есть некоторые вещи, которые вы просто не можете проверить?
Если у нас есть класс, который напрямую зависит от .NET Framework, то есть от класса System.IO.File, тогда мы не можем проверить его изолированно.
Конечно, мы можем обернуть его и ввести в зависимый класс, но затем мы начинаем обертывать каждый класс .NET! Что делать, если эта обертка не является прямым вызовом? Возможно, сначала он выполняет некоторую проверку/бизнес-логику, которую вы хотите протестировать?
В настоящее время мы обертываем до определенного уровня, а затем просто не пытаемся тестировать эту оболочку. Возможно, это нормально, потому что он будет протестирован позже путем интеграции и исследовательского тестирования?
Вот пример в C# просто чтобы проиллюстрировать мою точку зрения:
Этот класс тесно связан с .NET Framework .. то отлично, но теперь я не могу проверить его в изоляции, она требует файлов существовать и т.д. .
public class PathResolver
{
public string Resolve(string filename)
{
string completePath = string.Empty;
if(!File.Exists(filename))
{
return Path.Combine(@"D:\MyExample", filename);
}
return completePath;
}
}
мы можем модульное тестирование это, делая что-то вроде:
public class PathResolver
{
private readonly IFileSystem _fileSystem;
public PathResolver(IFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
public string Resolve(string filename)
{
string completePath = string.Empty;
if(!_fileSystem.Exists(filename))
{
return _fileSystem.Combine(@"D:\MyExample", filename);
}
return completePath;
}
}
Но теперь мы не можем проверить класс "Filesystem"!
Что представляют собой мысли других народов?
Да, я думаю, ваше право, просто держите код клея как можно более простым, и если он выглядит немного сложным, позвольте нашим альтернативным методам тестирования поднять его. Это немного уменьшает ценность проведения модульных тестов, я думаю ... мы не будем знать, что мы что-то сломали в одном из этих классов, сохраняя при этом! –