У меня есть класс бизнес-уровня, который использует System.IO.File для чтения информации из различных файлов. Чтобы выполнить модульное тестирование этого класса, я решил заменить зависимость от класса File на введенную зависимость следующим образом:
using System.IO;
public interface IFileWrapper
{
bool FileExists( string pathToFile );
Stream Open( string pathToFile );
}
Теперь я могу проверить свой класс, используя макет, и с миром все в порядке. Отдельно мне нужна конкретная реализация. У меня есть следующее:
using System;
using System.IO;
public class FileWrapper : IFileWrapper
{
public bool FileExists( string pathToFile )
{
return File.Exists( pathToFile );
}
public Stream Open( string pathToFile )
{
return File.Open( pathToFile, FileMode.Open, FileAccess.Read, FileShare.Read );
}
}
Теперь мой бизнес-класс больше не зависит от класса System.IO.File и может быть протестирован с использованием Mock of IFileWrapper. Я не вижу необходимости тестировать класс System.IO.File, так как полагаю, что он был тщательно протестирован Microsoft и проверен в бесчисленных случаях.
Как проверить конкретный класс FileWrapper? Хотя это простой класс (низкий риск), у меня есть примеры большего размера, которые следуют тому же подходу. Я не могу приблизиться к 100% охвату кода (если это важно), не завершив этого.
Большой вопрос, который я здесь задаю, заключается в том, как преодолеть разрыв между модульным тестированием и интеграционным тестированием? Нужно ли тестировать этот класс или есть какой-то атрибут, чтобы украсить этот класс, чтобы исключить это из расчета покрытия кода.