我想單元測試一個方法調用,等待一個線程接收一個特定的值。線程每秒從一個接口輪詢幾次,當沒有信息時,它會收到一個默認的消息類型0.但是當線程接收到大於0的特定消息類型時,它會對它作出反應。我的情況是,具體的值打破了等待和方法返回結果。但是,我如何使用Moq進行設置?安裝Moq多次返回默認值,直到它應該返回一個特定的值
這個問題不是關於返回一個已知的序列,而是返回一個未知的連續序列,直到預期一個已知的值。
這是我走到這一步:
mockedFacade.Setup(facade => facade.RequestPayment()).Callback(
() =>
{
CallbackMessageService.AddMessage(new CallbackMessage{Type = 2, Value = 1});
}).Verifiable();
mockedFacade.Setup(facade => facade.GetCallbackMessage()).Returns(CallbackMessageService.GetNextMessage());
我建立一個測試系統,用於創建一個名爲CallbackMessageService消息。當Facade調用facade.GetCallbackMessage(第二個設置)時,它將默認返回一個類型爲0的消息。在測試過程中,我可以調用CallbackMessageService並通過CallbackMessageService.AddMessage(第一設置)向其添加消息。下次調用facade.GetCallbackMessage()時,系統將返回該特定消息。
CallbackMessageService可以工作,但問題是GetCallbackMessage(第二設置)的設置以某種方式緩存它從CallbackMessageService接收的第一條消息。然後它總是返回緩存的消息,而CallbackMessageService.GetNextMessage()永遠不會再被調用。我需要設置它,所以每當facade.GetCallbackMessage()時總是調用CallbackMessageService.GetNextMessage()。
我如何用Moq來完成?
我假設緩存是默認的事情,我知道關於SetupSequence。問題是我無法控制在返回特定值之前我必須處理多少個默認值。
我刪除了一些代碼來嘗試隔離問題。請讓我知道,如果有一點上下文。
[不同的返回值第一次和第二次與Moq]可能的副本(https://stackoverflow.com/questions/7287540/different-return-values-the-first-and-second-time-with-moq ) – krillgar
@krillgar我明白這看起來像是這類問題的重複,但這些問題總是知道他們確切的回報結構,而在我的情況下我不知道。在需要返回特定類型之前,我可以接收0給無限的默認類型。 – evilfish