我已经开发了一个功能应用程序,该应用程序由Http请求触发,并在服务总线上窥视相应队列(通过连接字符串连接至该队列)以查找具有特定参数值的消息,然后删除它们。
除了在开发时进行常规测试之外,创建集成测试并在CI / CD流程中运行它们也很棒,但是我不知道如何模拟功能应用程序也连接的队列(创建测试队列(仅用于测试目的的)位于服务总线上的选项不是一种选择)。有谁知道如何进行吗?
这是我的代码段:
{
...
log.LogInformation($"Scenario: Recieved request to delete scheduled message with parameter: {parameter_value}");
messageReceiver = new MessageReceiver(ServiceBusConnectionString, queue_name, ReceiveMode.PeekLock);
bool found = false;
IList<Message> messages = await messageReceiver.PeekAsync(100);
foreach (Message message in messages){
string messageBody = Encoding.UTF8.GetString(message.Body);
var jsonMessageBody = JsonConvert.DeserializeObject<ScheduledMessage>(messageBody);
if (jsonMessageBody.parameter_value.Equals(flow_id)){
deleteMessage(message);
found = true;
log.LogInformation($"Scenario: Message with parameter_value: {parameter_value} and body: {messageBody} have been removed from the queue {queue_name}.");
}
}
...
}
private async static void deleteMessage(Message message){
QueueClient queueClient = new QueueClient(ServiceBusConnectionString, queue_name);
await queueClient.CancelScheduledMessageAsync(message.SystemProperties.SequenceNumber);
}
此方法的另一个好处是安全性。如果您的存储库是公共的,则每个测试套件运行的名称空间将确保可以安全地执行来自外部贡献者的PR。