2009-02-23 4 views
21

Czy jest możliwe uzyskanie dostępu do parametru używanego do wywoływania fałszywych oczekiwań podczas składania obiektu Returns?Uzyskiwanie dostępu do oryginalnych argumentów Expect() podczas składania wartości w Returns()

Oto zalążek dla obiektów biorących udział i, biorąc pod uwagę, że próbuję mock kolekcję:

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)); 
    } 
} 

otrzymali listę test CollectionValues, które będą wykorzystywane do wyśmiewali obiektu, w jaki sposób można czy można skonfigurować oczekiwanie, które obsłuży wszystkie możliwe permutacje identyfikatorów na tej liście wartości CollectionValues, w tym połączenia, które łączą istniejące identyfikatory i nieistniejące identyfikatory? Mój problem wynika z chęci ustawienia wszystkich możliwych oczekiwań w jednym wywołaniu; jeżeli dostęp do pierwotnego parametru nie jest możliwy, mogę równie łatwo ustawić dokładnie oczekiwane oczekiwanie, które chcę przetestować w danym połączeniu za każdym razem.

Oto, co miałem nadzieję zrobić, gdzie "???" oznacza gdzie byłoby przydatne, aby mieć dostęp do parametru stosowanego zadzwonić GetById (ten, który zakwalifikował się do ograniczenia It.IsAny):

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

Odpowiedz

61

z prowadnicy MOQ quickstart:

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

Co sugeruje dlatego możesz wypełnić swoje ??? jako

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