Questa è la struttura della mia soluzione:
Storage.csproj
> FileDownloader.cs
> GitHubProvider.cs (implements IStorageProvider)
> IStorageProvider.cs
Storage.Test.csproj
> FileDownloaderFixture.cs
L'idea è che posso usare la classe FileDownloader
, iniettarla con un IStorageProvider
, chiamare myFileDownloader.Download(url)
, e scaricherà il file sul filesystem.
Ora, la domanda è: come posso testare questo? Ho scritto il seguente test:
[TestClass]
public class FileDownloaderFixture
{
[TestMethod]
public void TestDownload()
{
//Arrange
var storageProviderMock = new Mock<IStorageProvider>(MockBehavior.Strict);
storageProviderMock.Setup(s => s.Download("http://host.com/file.txt")).Returns(Status.Success);
var myFileDownloader = new FileDownloader(storageProviderMock.Object);
//Act
myFileDownloader.DownloadFile("http://host.com/file.txt");
//Assert
storageProviderMock.Verify(s => s.Download("http://host.com/file.txt"));
}
}
Sembra bello e pulito, ma ... è inutile. Non dimostra il fatto che il codice in GitHubProvider.Download(url)
funzioni. Non utilizzo nemmeno metodi da GitHubProvider
. Allora, qual è il punto?
L'unica altra idea che ho è di impostare un account GitHub di prova e amp; repository e lavorare con quello. Ma questa soluzione non funzionerà molto bene se, ad esempio, dovessi pagare per ogni accesso al repository. Che cosa allora?