Как предполагает rwwilden, жизнь намного проще, если вы используете API на основе потоков, а не на основе имен файлов.Использование насмешек здесь не очень уместно, ИМО;вы не проводите «тестирование протокола» - вам просто нужен источник данных.
Вы также можете предоставить перегрузку, которая является простым служебным методом:
public Result ParseXml(string file)
{
using (Stream stream = File.OpenRead(file))
{
return ParseXml(stream);
}
}
Тогда вы могли бы достаточно безопасно не тестируйте этот метод - в конце концов, он не имеет существенной логики.
Теперь вы можете протестировать API на основе потока с помощью жестко закодированной строкив вашем коде, затем вызывая Encoding.UTF8.GetBytes(xml)
и создавая MemoryStream
вокруг полученного байтового массива ... но я обычно предпочитаю использовать отдельные файлы данных в моем тестовом проекте.Установите тип содержимого «встроенный ресурс», а затем используйте Assembly.GetManifestResourceStream
для получения потока в тестовый файл.
Если это действительно обычный XML-файл, действительно ли вы хотитесделать разбор самостоятельно?Есть ли какая-то причина, по которой вы не хотите оставлять это в структуре и выражать свой API в терминах DOM API, LINQ to XML или XmlReader
?