Я хочу проверить обратный вызов обработчика сообщений, который я зарегистрировал в QueueClient, используя queueClient.RegisterMessageHandler(MyCallBack, messageHandlerOptions)
.
public Task MyCallBack(Message msg, CancellationToken token)
{
// Read msg. Do something
// Since everything ran fine, complete the msg.
await _client.CompleteAsync(msg.SystemProperties.LockToken);
}
Теперь в рамках моего модульного теста я звоню MyCallBack
. Поскольку я передаю действительное сообщение. Я ожидаю, что client.CompleteAsync()
будет вызван. Однако тест выдает исключение.
System.InvalidOperationException: Operation is not valid due to the current state of the object.
Это потому, что msg.SystemProperties.LockToken
не установлен , а не установлен (это потому, что сообщение не было на самом деле прочитано из очереди клиентом в режиме ReceiveMode.PeekLock
).
Есть ли способ установить / смоделировать это, чтобы я мог выполнять свои тесты с фиктивной строкой в качестве токена?
PS: я знаю, что могу проверить msg.SystemProperties.IsLockTokenSet
перед тем, как получить доступ к полю LockToken; но даже в этом случае я никогда не смогу провести модульное тестирование, если был вызван _client.CompleteAsync()
.