Ho visto più risposte su "come cancellare le tue classi in modo da poter controllare ciò che accade all'interno del SUT".C# stub. Interfaccia per ogni oggetto testabile?
dicono una cosa:
Creare un'interfaccia e iniettare che si interfacciano con l'iniezione di dipendenza e creare uno stub utilizzando la stessa interfaccia che si poi iniettare nel SUT.
Tuttavia, ciò che ho imparato nei miei precedenti luoghi di lavoro:
Se unit test, si prova tutti classi/funzioni.
Questo significa che per ogni classe che ha una specifica funzione di layout è necessario creare un'interfaccia?
ciò significherebbe la quantità di classi/file sarebbe quasi il doppio di molti.
Come visto nell'esempio qui sotto, è questo 'la strada da percorrere' o mi sto perdendo qualcosa nel mio processo di test di unità?
Come nota: Sto usando VS2012 Express. Ciò significa che non esiste una struttura "Faker". Sto usando il framework di test unitario "standard" VS2012.
Come molto, molto semplice esempio, che mi permette di stub ciascuna interfaccia tramandata ad un SUT.
IFoo.cs
public interface IFoo
{
string GetName();
}
Foo.cs
public class Foo : IFoo
{
public string GetName()
{
return "logic goes here";
}
}
IBar.cs:
public interface IBar : IFoo
{
IFoo GetFoo();
}
Bar.cs:
public class Bar : IBar
{
public string GetName()
{
return "logic goes here";
}
public IFoo GetFoo()
{
return null; // some instance of IFoo
}
}
IBaz.cs:
public interface IBaz
{
IBar GetBar();
}
Baz.cs:
public class Baz
{
public IBar GetBar()
{
return null; // some instance of IBar
}
}
Il mio consiglio: trovare un buon quadro di simulazione (Moq è una buona scelta) che non richiede di creare tutte queste interfacce. –
Vado a dare un'occhiata a questo framework –
@RobertHarvey: in che modo Moq aiuterà a evitare la creazione di interfacce? L'OP deve comunque lasciare i punti di ingresso per esso (Moq), che si tratti di membri virtuali o interfacce. –