2009-02-23 2 views
21

È possibile ottenere l'accesso al parametro utilizzato per effettuare una chiamata a un'aspettativa di derisione durante il montaggio dell'oggetto Resi?Accedere agli argomenti originali di Expect() durante il montaggio del valore in Restituisce()

Ecco uno stub per gli oggetti coinvolti e, dato che, sto cercando di prendere in giro una collezione:

Class CollectionValue { 
    public Id { get; set; } 
} 
Class Collection { 
    private List<CollectionValue> AllValues { get; set; } 
    public List<CollectionValue> GetById(List<int> ids) { 
     return AllValues.Where(v => ids.Contains(v.Id)); 
    } 
} 

Dato un elenco di test di CollectionValues ​​che verrà utilizzato per l'oggetto preso in giro, come si fa andare sulla creazione di un'aspettativa che gestirà ogni possibile permutazione degli ID in quell'elenco di CollectionValues, comprese le chiamate che combinano ID esistenti e ID non esistenti? Il mio problema deriva dal desiderio di impostare tutte le possibili aspettative in una singola chiamata; se l'accesso al parametro originale non è possibile, potrei semplicemente impostare ogni volta l'esatta aspettativa che voglio testare in una determinata chiamata.

Ecco cosa speravo di fare, dove "???" rappresenta dove sarebbe comodo avere accesso al parametro utilizzato per chiamare GetById (quello che ha qualificato la restrizione It.IsAny):

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())).Returns(???); 

risposta

61

Dalla guida moq quickstart:

// access invocation arguments when returning a value 
mock.Setup(x => x.Execute(It.IsAny<string>())) 
       .Returns((string s) => s.ToLower()); 

Il che suggerisce quindi che puoi compilare il tuo ??? as

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())) 
       .Returns((List<int> l) => //Do some stuff with l 
        );