Actualmente estoy tratando de aprender la prueba de la unidad adecuada. Así que ahora estoy tratando de escribir pruebas unitarias para una clase que debe mapear datos de un archivo XML a los objetos adecuados. Por supuesto, toda la funcionalidad de la clase depende de la existencia del archivo XML correspondiente. El archivo XML se carga en el constructor de la clase.Cómo probar la unidad de una clase que necesita un archivo específico para estar presente
Estoy usando C# con NUnit. Hasta ahora tengo dos pruebas:
[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();
}
No estoy seguro de si la comprobación de la existencia del archivo en el examen es una forma adecuada para ir, por lo que cualquier sugerencia sobre los que la prueba también son bienvenidos. Pero mi pregunta es cómo proceder con las siguientes pruebas. Obviamente, todas las siguientes pruebas van a fallar, si el archivo XML no está presente.
Entonces, ¿supongo que el archivo XML está presente, teniendo en cuenta que una prueba errónea podría significar que no lo está? Eso no me parece correcto.
¿Existe un patrón general para solucionar un problema como este?
Thx por la ayuda
edición: volvió a escribir la segunda prueba, ya que estaba fallando si el archivo estaba realmente presente ...
Edit2: Que es ayudar a decirle, lo que la realidad SettingsReader hace. Hasta ahora se ve así:
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);
}
}
}
no estoy seguro, pero creo que un StreamReader no sería el camino a seguir aquí, ¿verdad?
¿Está el editor de configuración diseñado para usar la inyección de dependencia? Suena como un buen caso para DI y burla. –
MSTest tiene [DeploymentItem] para esto. ¿Tal vez NUnit tiene algo así? –