Попробуйте MinGW, минималистский GNU для Windows. Вот список инструментов GNU, которые они предлагают: http://sourceforge.net/projects/mingw/files/
Сюда входят такие вещи, как bash, sed, awk, grep, cut и другие знакомые инструменты GNU. Perl тоже там. Я считаю, что это хорошая легкая альтернатива Cygwin.
Используйте SystemWrapper , библиотеку, которая предоставляет интерфейсы и имитируемые классы-оболочки для многих классов .NET, которые сами по себе не реализуют интерфейсы.
Разработайте свой код так, чтобы вместо прямого доступа к классу FileInfo
обращался к интерфейсу (например, с именем IFileInfo
) с теми же возможностями. В производственном коде вы будете использовать класс, который просто делегирует все свои функции классу системы FileInfo
, но для модульного тестирования вы можете имитировать интерфейс.
Например, в приложении, которое я сделал, действовало иначе в зависимости от текущей даты я объявил следующий интерфейс:
interface IDateTimeProvider
{
DateTime Today();
}
А производственный класс был просто:
class DateTimeProvider : IDateTimeProvider
{
public DateTime Today()
{
return DateTime.Today;
}
}
Вы можете дополнить этот подход использованием механизма внедрения зависимостей, чтобы решить, следует ли использовать реальный класс или макет в каждом случае.