gpt4 book ai didi

c# - Azure Functions V2 的单元测试 MessageSender

转载 作者:行者123 更新时间:2023-12-04 17:32:53 32 4
gpt4 key购买 nike

我正在尝试找到在 Azure 函数中使用 MessageSender 作为与 ServiceBus 的连接的最佳方法,以便对其进行单元测试。我一直无法找到编写代码进行单元测试的最佳方法。

代码

public static class SomeFunction
{
[FunctionName("SomeFunction")]
public static async Task Run(
[ServiceBusTrigger("someQueue", Connection = ConnectionString)]Message message
, [ServiceBus("someQueue", Connection = ConnectionString")]MessageSender messagesQueue
, MessageReceiver receiver
, string lockToken)
{
...some code
}
}

我尝试将 MessageSender 更改为 IMessageSender 但出现以下绑定(bind)错误

绑定(bind)错误

System.InvalidOperationException: "Can't bind ServiceBus to type 'Microsoft.Azure.ServiceBus.Core.IMessageSender."

然后将其切换回 MessageSender 并尝试模拟它,一旦我运行测试,我收到以下错误。

单元测试示例

[TestMethod]
public async Task Run_ValidMessage_Expect_Run_Succesfully()
{
var sbBuilder = new ServiceBusConnectionStringBuilder(ActualSbConnectionString);
Mock<MessageSender>sender = new Mock<MessageSender>(sbBuilder, RetryPolicy.Default);
SomeFunction.Run(_sender.Object);
}
Error: 
threw exception:
System.ArgumentException: The argument is null or white space.
Stack Trace:
at MessageSender.ctor(String entityPath, String transferDestinationPath, Nullable`1 entityType, ServiceBusConnection serviceBusConnection, ICbsTokenProvider cbsTokenProvider, RetryPolicy retryPolicy)
at MessageSender.ctor(String connectionString, String entityPath, RetryPolicy retryPolicy)

我无法编写具有工作单元测试和功能的代码。任何指示都会有帮助。

编辑:包含省略的参数

最佳答案

从您的代码来看,几乎没有错误,首先它应该是 ServiceBusTrigger 绑定(bind)而不是 ServiceBus 因为您没有显示触发器绑定(bind)或忽略了它。那么如果您的触发器是ServiceBusTrigger,则只能绑定(bind)MessageReceiverMessageSender用于ServiceBusSample code .

下面是我的测试代码,ServiceBusTrigger用于接收消息,ServiceBus用于发送消息。我使用 Microsoft.Azure.WebJobs.Extensions.ServiceBus 3.0.3

[FunctionName("Function1")]
public static async System.Threading.Tasks.Task RunAsync([ServiceBusTrigger("myqueue", Connection = "ConnectionString")]
MessageReceiver messageReceiver,
ILogger log,
[ServiceBus("test", Connection = "ConnectionString")]MessageSender messagesQueue)
{
Console.Write(messageReceiver.Path);

Message m1 = await messageReceiver.PeekAsync();

await messagesQueue.SendAsync(m1);

}

这对我有用,如果这个代码是你想要的,你可以尝试一下。如果您仍有问题,请随时告诉我。

关于c# - Azure Functions V2 的单元测试 MessageSender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57930974/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com