При модульном тестировании всегда трудно понять, насколько низко до фреймворка вы идете.
Если у нас есть класс, который напрямую зависит от .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!
Что думают другие люди?