Хорошие юнит-тесты являются единичными. Это означает, что они абсолютно независимы от любой среды (файлов, базы данных, сети и т. Д.). Если ваш код использует файлы для хранения данных в нем, вам следует скрыть какой-то интерфейс, производственный и тестовый код будут использовать разные значения. Производство действительно сделает запись в файл, тестирование будет только эмулировать его.
public interface IStorage
{
bool StoreToFile(string path, string file, byte[] data);
}
public class Storage : IStorage
{
public bool StoreToFile( ... )
{
return WriteToFile( ... );
}
}
public class StorageMock : IStorage
{
public bool StoreToFile (...)
{
return false; //or true, depends on you test case
}
}
Теперь в тестах вы можете "заменить" реальное значение фальшивым. Это называется издевательством.
Проект, который принимает во внимание, называется «Инверсия контроля». Существует также множество платформ, которые позволяют использовать «Investion of Control» посредством внедрения зависимостей (StructureMap, Ninject, Wisdor)