Czy można zmodyfikować parametr wywołania metody wyszydzanej? W szczególności zamierzam zmienić buffer
w poniższym przykładzie na wstępnie wypełnioną tablicę bajtów.Jak zmodyfikować parametr wywołania wyśmiewanej metody za pomocą Moq?
przykład:
int MockedClass.Read(byte[] buffer, int offset, int count)
Objaśnienie:
Wywołanie Read
ładunki count
bajtów czytaniem offset
do dołączonej tablicy bajtów buffer
.
Teraz chciałbym, aby bufor był wypełniany po wywołaniu Read
w moim kodzie aplikacji. Czy to jest możliwe?
Jeśli tak, w jaki sposób podchodziłbym do kolejnych połączeń z numerem Read
? Chciałbym, aby kolejne wywołania zwracały inny bufor za każdym razem, jeśli to możliwe.
EDIT:
używając polecenia Setup
takiego:
MockedClass.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()).Callback((byte[] buffer, int offset, int count) => buffer[0] = 0xAA);
daje mi dziwne problemy podczas wykonywania testów jednostkowych: Gdy wywołanie Read
jest wykonany, a kod delegat (buffer[0] = 0xAA
) jest wykonywany debugger pokazuje, że buffer
jest faktycznie null
i wykonanie testu jednostkowego zatrzymuje się po wykonaniu tego polecenia. Czy moja składnia jest zepsuta, czy jest to błąd?
Cześć Mark. Dziękuję za odpowiedź. Jeśli użyję tego wzorca, mój test jednostki zatrzyma się właśnie w tym punkcie wywołania zwrotnego, gdy delegat zostanie wykonany. Debugowanie problemu wykazało, że tablica bajtów buforów ma wartość 'null'. Jakieś pomysły, dlaczego tak się stało? –
Jest pusta, chyba że ją przypiszesz. Powyższe wywołanie Instalatora nie * przypisuje * zmiennej buforowej - dopasowuje istniejącą zmienną. W swojej edycji pasujesz do 'It.IsAny()', ale osoba dzwoniąca musi podać tę wartość. –