Mam klasy Transfer
, uproszczone wygląda to tak:Krzesanie metoda rzucić wyjątek (moq), ale poza tym zachowywać się jak wyśmiewany obiekt?
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);
}
}
Uproszczona wersja interfejsu IFileConnection
wygląda następująco:
public interface IFileConnection
{
void Get(string remoteFileName, string localFileName);
void Put(string localFileName, string remoteFileName);
}
Prawdziwa klasa ma obsługiwać System.IO.IOException
który jest rzucane, gdy konkretne klasy IFileConnection
tracą łączność z pilotem, wysyłając e-maile, a co nie.
Chciałbym użyć Min utworzyć klasę Transfer
i używać go jako mojego betonowej Transfer
klasy we wszystkich właściwości i metod, z wyjątkiem przypadku, gdy metoda GetFile
jest wywoływana - to chcę to rzucić System.IO.IOException
i upewnij się, że Klasa Transfer
obsługuje ją poprawnie.
Czy używam odpowiedniego narzędzia do pracy? Czy podążam tą drogą we właściwy sposób? I jak mam napisać konfigurację dla tego testu jednostkowego dla NUnit
?
Hmm. Nie tego oczekiwałem, a teraz widzę, jak za bardzo upraszczałem moją klasę "Transfer". Czy możesz spojrzeć na zmiany, które wprowadziłem w klasie "Transfer"? Przypomina to nieco mój kod. Właściwości są ujawnione w klasie, ale zrobiłem to głównie, więc mogłem przetestować warunek wyjątku. Czy to, co próbowałem zrobić w niewłaściwy sposób? –
@JeremyHolovacs Zaktualizowałem swoją odpowiedź. –
Hmm. To, co wydawało mi się proste, wydaje się coraz mniej. Pozwól, że Cię o to zapytam: czy bardziej sensownym byłoby stworzenie klasy testowej, która dziedziczy po 'Transfer' i nadpisuje metodę w celach testowych? Być może kpina nie jest odpowiednią technologią do zastosowania w tym scenariuszu, a ja próbuję wepchnąć kwadratowy kołek do okrągłej dziury? –