Но когда дело доходит до модульного тестирования, я чувствую, что в моем проекте есть большой недостаток, поскольку я не могу Я не могу использовать Moq для имитации этого статического класса.
Я могу привести простой пример одного проекта, над которым я работаю, который копирует много файлов, поэтому я сделал небольшой помощник, чтобы избежать избыточности в моем код
Код: Выделить всё
public static class Helpers
{
public static void CopyFile(string sourcePath, string destPath)
{
Log.Verbose("Start copy from {SourcePath} to {DestPath}", sourcePath, destPath);
if (!Directory.Exists(Path.GetDirectoryName(destPath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(destPath));
}
File.Copy(sourcePath, destPath, true);
Log.Verbose("End of copy from {SourcePath} to {DestPath}", sourcePath, destPath);
}
}
Я попытался использовать System.IO.Abstraction и внедрение зависимостей, чтобы решить эту проблему, и тогда у меня есть следующий код:
Код: Выделить всё
public interface IHelpers
{
public void CopyFile(string sourcePath, string destPath);
}
public class Helpers(IFileSystem fileSystem) : IHelpers
{
private readonly IFileSystem FileSystem = fileSystem;
public void CopyFile(string sourcePath, string destPath)
{
Log.Verbose("Start copy from {SourcePath} to {DestPath}", sourcePath, destPath);
if (!FileSystem.Directory.Exists(Path.GetDirectoryName(destPath)))
{
FileSystem.Directory.CreateDirectory(Path.GetDirectoryName(destPath));
}
FileSystem.File.Copy(sourcePath, destPath, true);
Log.Verbose("End of copy from {SourcePath} to {DestPath}", sourcePath, destPath);
}
}
За исключением редких случаев, когда мне кажется неправильным внедрить этот помощник внутрь класс
Код: Выделить всё
public class Component
{
public string Name;
public string Path;
public void ExportOutput()
{
// ...
// much calculation then...
// multiple calls to Helpers.CopyFile(src,dest);
// ...
}
}
Единственное решение, которое я нашел для этой проблемы. проблема заключается в том, чтобы удалить функцию ExportOutput и поместить ее туда, где я могу полагаться на внедрение зависимостей для использования класса Helper.
Это правильно, или я полностью упускаю суть?
Как вы обычно обрабатываете эти небольшие вспомогательные функции в своем коде?
Подробнее здесь: https://stackoverflow.com/questions/787 ... lper-class
Мобильная версия