Я сейчас пытаюсь выучить правильный юнит-тест.Поэтому сейчас я пытаюсь написать модульные тесты для класса, который должен отображать данные из XML-файла в соответствующие объекты.Разумеется, все функциональные возможности класса зависят от наличия соответствующего XML-файла.XML-файл загружается в конструктор класса.
Я использую C # с NUnit.Пока у меня есть два теста:
[Test]
public void ShouldAllowInstanceToBeCreatedWhenXMLFileIsPresent()
{
if (File.Exists(SettingsReader.XML_SETTINGS_PATH))
{
SettingsReader settingsReader = new SettingsReader();
Assert.AreNotEqual(null, settingsReader);
}
}
[Test]
[ExpectedException("Telekanzlei.Clientmanager.XMLDataLayer.XMLFileNotFoundException")]
public void ShouldThrowExceptionWhenXMLFileIsNotPresent()
{
if (!File.Exists(SettingsReader.XML_SETTINGS_PATH))
{
SettingsReader settingsReader = new SettingsReader();
}
else
throw new XMLFileNotFoundException();
}
Я не уверен, что проверка наличия файла в тесте - это правильный путь, поэтому любые предложения по этому тесту также приветствуются.Но мой вопрос в том, как пройти следующие тесты.Очевидно, что все последующие тесты будут провалены, если XML-файл отсутствует.
Итак, я предполагаю, что XML-файл присутствует, имея в виду, что провальный тест может просто означать, что его нет?Мне бы это не показалось правильным.
Существует ли общая схема решения такой проблемы?
Спасибо за любую помощь
edit: переписал второй тест, поскольку он не работал, если файл действительно присутствовал ...
edit2: Может, он помогает вам сказать, что на самом деле делает SettingsReader.Пока это выглядит так:
public class SettingsReader
{
public static readonly string XML_SETTINGS_PATH = "C:\\Telekanzlei\\Clientmanager_2.0\\Settings.xml";
public XElement RootXElement { get; private set; }
public SettingsReader()
{
if (!File.Exists(XML_SETTINGS_PATH))
throw new XMLFileNotFoundException();
using (var fs = File.OpenRead(XML_SETTINGS_PATH))
{
RootXElement = XElement.Load(fs);
}
}
}
Я не уверен, но я думаю, что StreamReader не был бы подходящим способом, не так ли?