c# - Setup Moq to return default value multiple times until it should return a specific value -
i trying unittest method call waits thread receive specific value. thread polling interface several times second , when there no information it, receives default message type 0. when thread receives specific message type above 0, reacts it. case specific value breaks wait , method returns result. how set moq?
this question not returning known sequence, returning unknown continuous sequence until known value expected.
here got far:
mockedfacade.setup(facade => facade.requestpayment()).callback( () => { callbackmessageservice.addmessage(new callbackmessage{type = 2, value = 1}); }).verifiable(); mockedfacade.setup(facade => facade.getcallbackmessage()).returns(callbackmessageservice.getnextmessage()); i build test system creating messages called callbackmessageservice. when facade calls facade.getcallbackmessage (2nd setup), returns message type 0 per default. during test can call callbackmessageservice , add message via callbackmessageservice.addmessage (1st setup). next time facade.getcallbackmessage() called, system return specific message.
the callbackmessageservice works, problem setup getcallbackmessage (2nd setup) somehow caching first message receives callbackmessageservice. returns cached message , callbackmessageservice.getnextmessage() never called again. need setup callbackmessageservice.getnextmessage() called whenever facade.getcallbackmessage() is.
how accomplish moq?
i assume caching default thing in moq , know setupsequence. problem have no control on how many default values have handle before specific value should returned.
i removed code try isolate problem. please let me know if there little context.
after posted question continued tinker code , found solution. solution works because system test calls method called facade.callbackmessageprocessed on interface before calls facade.getcallbackmessage() again. use advantage so:
mockedfacade.setup(facade => facade.requestpayment()).callback( () => { callbackmessageservice.addmessage(new callbackmessage{type = 2, value = 1, messageid = guid.newguid().tostring()}); }).verifiable(); mockedfacade.setup(facade => facade.getcallbackmessage()).returns(callbackmessageservice.getnextmessage()); mockedfacade.setup(facade => facade.callbackmessageprocessed(it.isany<callbackmessage>())).callback( (callbackmessage c) => { callbackmessageservice.messageresolved(c); mockedfacade.setup(facade => facade.getcallbackmessage()).returns(callbackmessageservice.getnextmessage()); }); whenever callbackmessageprocessed called create called redo setup. continues loop until test completes. 1 way solve issue.
i tried setup in facade.getcallbackmessage() callback, did not work.
while answer specific case nice see if there way allow multiple unknown amount of returns on setup in moq before return expected, if not have second method did.
Comments
Post a Comment