В этом случае вы находитесь на более низком уровне зависимости.Вы проверяете, что файл существует и что xmlprovider может быть создан с файлом в качестве источника.
Единственный способ, которым вы могли бы сломать зависимость, - это ввести что-то для создания XmlDataProvider
.Затем вы могли бы посмеяться над ним, чтобы вернуть XmlDataProvider
, который вы создали (в отличие от чтения).В качестве упрощенного примера можно привести:
class XmlDataProviderFactory
{
public virtual XmlDataProvider NewXmlDataProvider(string fileName)
{
return new XmlDataProvider
{
IsAsynchronous = false,
Source = new Uri(fileName, UriKind.Absolute)
};
}
class XmlDataProviderFactoryMock : XmlDataProviderFactory
{
public override XmlDataProvider NewXmlDataProvider(string fileName)
{
return new XmlDataProvider();
}
}
public class LocalizationData
{
...
public XmlDataProvider LoadFile(string fileName, XmlDataProviderFactory factory)
{
if (IsValidFileName(fileName))
{
return factory.NewXmlDataProvider(fileName);
}
return null;
}
}
[TestFixture]
class LocalizationDataTest
{
[Test]
public void LoadFile_DataLoaded_Succefully()
{
var data = new LocalizationData();
string fileName = "d:/azeri.xml";
XmlDataProvider result = data.LoadFile(fileName, new XmlDataProviderFactoryMock());
Assert.IsNotNull(result);
Assert.That(result.Document, Is.Not.Null);
}
}
Использование инфраструктуры инъекций может упростить вызов до LoadFile
путем внедрения фабрики в конструктор класса или в другое место.