Stack di tecnologia: .NET 4, C#, NUnitTDD: È plausibile disporre di test di integrazione, ma nessun test unitario?
Sto tentando di applicare lo sviluppo basato su test a un nuovo progetto che esegue l'elaborazione delle immagini. Ho una classe base che contiene i metodi I/O di file condivisi e sottoclassi che eseguono vari algoritmi di elaborazione specifici. A quanto ho capito, i test unitari non toccano il file system o altri oggetti e simulano il comportamento laddove ciò si verifica. La mia classe base contiene solo accessor semplici e chiamate I/O di file system semplici.
public class BaseFile
{
public String Path { get; set; }
public BaseFile()
{
Path = String.Empty;
}
public BaseFile(String path)
{
if (!File.Exists(path))
{
throw new FileNotFoundException("File not found.", path);
}
Path = path;
}
}
C'è qualche valore nel testare questi metodi? In caso affermativo, come potrei astrarre le chiamate al file system?
Un'altra domanda è come testare la sottoclasse che è specifica per un tipo di file immagine (~ 200 MB). Ho cercato il sito e trovato similarquestions, ma nessuno si occupa delle dimensioni del file con cui sto lavorando su questo progetto. È plausibile che una classe abbia test di integrazione (usando un "file dorato"), ma non test di unità? Come potrei seguire rigorosamente i metodi TDD e in primo luogo scrivere un test fallito in questo caso?
Se TDD è difficile da applicare o inadeguato, non applicarlo. Non è una pallottola d'argento. – CharlesB
@CharlesB, sono d'accordo. Sfortunatamente questo sentimento è spesso usato come scusa per non usare TDD quando è effettivamente giusto e vantaggioso farlo. A volte c'è una grande curva o un sacco di lavoro da fare, ma questo di solito paga. –
@CharlesB Non sono sicuro che sia d'accordo. Il problema è che quindi questa classe che fa un po 'di lavoro non è testata, e quindi la tua fiducia nel cambiarla è diminuita. Il problema è che non è facile prendere in giro i metodi statici in System.IO, ma ciò non significa rinunciare ai test, significa solo che devi fare un po 'più di lavoro per renderli testabili. Questo è il motivo per cui MS introduce System.Web.HttpContextBase, per risolvere i problemi con non facilmente essere in grado di prendere in giro un HttpContext. Non abbiamo bisogno di testare httpContext, solo che il nostro codice interagisce correttamente con esso. – Andy