2012-03-29 21 views
7

Ho le seguenti interfacce. Non sono sicuro di come utilizzare Moq per simulare un IRepository a causa del fatto che T è generico. Sono sicuro che c'è un modo, ma non ho trovato nulla attraverso la ricerca qui o google. Qualcuno sa come posso ottenere questo?Usa moq per deridere un tipo con parametro generico

Sono abbastanza nuovo in Moq, ma posso vedere il vantaggio di dedicare del tempo per impararlo.

risposta

11

Non dovrebbe essere un problema a tutti:

public interface IAggregateRoot { } 

class Test : IAggregateRoot { } 

public interface IRepository<T> where T : IAggregateRoot 
{ 
    // ... 
    IList<T> FindAll(); 
    void Add(T item); 
    // ... 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     // create Mock 
     var m = new Moq.Mock<IRepository<Test>>(); 

     // some examples 
     m.Setup(r => r.Add(Moq.It.IsAny<Test>())); 
     m.Setup(r => r.FindAll()).Returns(new List<Test>()); 
     m.VerifyAll(); 
    } 
} 
3

Creo una classe fittizia di calcestruzzo nei miei test o utilizzo un tipo di entità esistente.

Potrebbe essere possibile farlo con 100 cerchi senza creare una classe concreta, ma non penso che ne valga la pena.

2

Devi specificare i tipi, per quanto ne so non esiste un modo diretto per restituire articoli digitati generici.

mock = new Mock<IRepository<string>>();  
mock.Setup(x => x.FindAll()).Returns("abc"); 
Problemi correlati