Sono d'accordo con Greg che l'iniezione di dipendenza ti aiuterà a risolvere molti problemi.
Ecco un'idea generale dell'aspetto attuale della tua classe (solo un'ipotesi):
public class ItemDownloader {
public void Download(){
var download = new Download();
download.Start(); // Or whatever is done with the downloader
}
}
Ora se dovessimo refactoring per prendere il download come dipendenza (ho anche usato il pattern factory qui come presumo che non stai riutilizzando il tuo singolo oggetto download ogni volta che viene chiamato il metodo Download) diventa molto più facile da testare senza preoccuparsi dell'implementazione della vera classe di download.
public class ItemDownloader {
private DownloadFactory _downloadFactory { get; private set; }
public ItemDownloader(DownloadFactory downloadFactory) {
_downloadFactory = downloadFactory;
}
public void Download(){
var download = _downloadFactory.CreateDownload();
download.Start();
}
}
public class ItemDownloaderTests {
public class TestWithMockDownloadFactory(){
var fake = new Mock<DownloadFactory>();
/// Logic to setup the fake as needed would go here.
var systemUnderTest = new ItemDownloader(fake.Object);
}
}