Obecnie piszę testy jednostkowe i kpiąc z zależności za pomocą ramy Moq. W ten sposób ja stworzyliśmy Mock tak:Alter Mock <IType> obiekt po właściwości .Object został nazwany
Mock<ITraceProvider> traceProviderMock = new Mock<ITraceProvider>();
traceProviderMock.Setup(x => x.GetTraceContext(It.IsAny<string>())).Returns("test");
ITraceProvider traceObj = traceProviderMock.Object;
Jednak później chcę zmodyfikować zachowanie makiety trochę więcej więc wzywam Setup
na atrapa obiektu znowu:
traceProviderMock.Setup(x => x.GetTracer(It.IsAny<string>())).Returns("tracer");
Teraz ponownie bez wywoływania traceProviderMock.Object
, czy to nowe pozorowane zachowanie odzwierciedli się w traceObj
? Tak właśnie chciałbym być.
To z pewnością zadziała w metodzie Verify()
, ale nie pojawia się w przypadku metody Setup
.
Powód, dla którego chcę to zrobić, wynika z faktu, że skonstruowałem pełny wykres zależności w metodzie testu z użyciem wyśmiewanej zależności. Chcę tylko zmienić zachowanie jednej z wyśmianych zależności dla mojego konkretnego testu. Kolejne testy będą również stosowały własne specjalizacje do wyśmiewanej zależności.
Czy metoda "GetTracer" jest ustawiana w konfiguracji testowej? –
Nie, to konfiguracja w określonej metodzie testu. Jest to specyficzna dla testu specjalizacja dla Mock'a, jeśli ma to sens. –
Zrobiłem test, i zadziałało to dla mnie. Mogłem ustawić metodę 'GetTracer' po pobraniu obiektu z' traceProviderMock', i zwróciło oczekiwaną wartość. Czy jesteś pewien, że Twoje twierdzenia są poprawnie skonfigurowane? Czy możesz przejść przez kod w debugerze, jeśli jeszcze tego nie zrobiłeś? –