tengo una clase Transfer
, simplificado que tiene este aspecto:¿Se burla de un método para lanzar una excepción (moq), pero actúa como el objeto burlado?
public class Transfer
{
public virtual IFileConnection source { get; set; }
public virtual IFileConnection destination { get; set; }
public virtual void GetFile(IFileConnection connection,
string remoteFilename, string localFilename)
{
connection.Get(remoteFilename, localFilename);
}
public virtual void PutFile(IFileConnection connection,
string localFilename, string remoteFilename)
{
connection.Get(remoteFilename, localFilename);
}
public virtual void TransferFiles(string sourceName, string destName)
{
source = internalConfig.GetFileConnection("source");
destination = internalConfig.GetFileConnection("destination");
var tempName = Path.GetTempFileName();
GetFile(source, sourceName, tempName);
PutFile(destination, tempName, destName);
}
}
La versión simplificada de la interfaz IFileConnection
se parece a esto:
public interface IFileConnection
{
void Get(string remoteFileName, string localFileName);
void Put(string localFileName, string remoteFileName);
}
Se supone que la verdadera clase para manejar una System.IO.IOException
que es lanzado cuando las clases concretas IFileConnection
pierden conectividad con el control remoto, enviando correos electrónicos y lo que no.
me gustaría utilizar Moq para crear una clase Transfer
, y utilizarlo como mi hormigón clase Transfer
en todas las propiedades y métodos, excepto cuando se invoca el método GetFile
- entonces quiero que tire System.IO.IOException
y asegúrese de que el Transfer
clase maneja correctamente.
¿Estoy utilizando la herramienta adecuada para el trabajo? ¿Voy por esto de la manera correcta? ¿Y cómo escribiría la configuración para esa prueba de unidad para NUnit
?
Hmm. No es lo que esperaba, y ahora veo que simplifiqué demasiado mi clase 'Transfer'. ¿Puedes ver los cambios que hice en la clase 'Transfer'? Esto se parece a mi código un poco más de cerca. Las propiedades están expuestas en la clase, pero lo hice principalmente para poder probar la condición de excepción. ¿Es lo que estaba tratando de hacer de la manera incorrecta? –
@JeremyHolovacs He actualizado mi respuesta. –
Hmm. Lo que pensé que sería simple parece ser menos. Déjame preguntarte: ¿tendría más sentido crear una clase de prueba que herede de 'Transferir' y anular el método para fines de prueba? Tal vez burlarse no es la tecnología adecuada para usar en este escenario, y estoy tratando de meter una clavija cuadrada en un agujero redondo. –