如何在联合测试中模拟 DurableTaskClient 并在 ScheduleNewOrchestrationInstanceAsync 模拟设置中出现错误

问题描述 投票:0回答:1

我正在尝试为持久功能编写单元测试。在那段时间里,我面临着关于 DurableTaskClient 的嘲笑的问题。我在 ScheduleNewOrchestrationInstanceAsync 模拟设置中遇到错误。

这是单元测试代码:

    public async Task HttpStart_ValidRequest_ReturnsSuccessResponse()
    {
        // Arrange
        // Define constants
        const string functionName = "SampleFunction";
        const string instanceId = "7E467BDB-213F-407A-B86A-1954053D3C24";

        var loggerMock = new Mock<ILogger<Template>>();
        var optionsMock = new Mock<IOptions<AppConfig>>();
        var commonServiceMock = new Mock<ICommonService>();
        var ServiceMock = new Mock<IService>();

        var requestMock = new Mock<HttpRequestData>();
        var requestBody = @"{""Id"":""123""}";
        requestMock.Setup(req => req.Body).Returns(new MemoryStream(Encoding.UTF8.GetBytes(requestBody)));

      var durableClientMock = new Mock<DurableTaskClient>();

        durableClientMock.Setup(x => x.ScheduleNewOrchestrationInstanceAsync(functionName It.IsAny<object>())).
ReturnsAsync(instanceId);

        durableClientMock.Setup(client => client.ScheduleNewOrchestrationInstanceAsync(It.IsAny<string>(), requestMock.Object))
            .ReturnsAsync("instanceId123");

        var functionContextMock = new Mock<FunctionContext>();
        functionContextMock.Setup(ctx => ctx.GetLogger(It.IsAny<string>())).Returns(loggerMock.Object);

        var buildTemplate = new BuildTemplate(optionsMock.Object, commonServiceMock.Object, ServiceMock.Object);

        // Act
        var response = await buildTemplate.HttpStart(requestMock.Object, durableClientMock.Object, functionContextMock.Object);

        // Assert
        Assert.IsNotNull(response);
        Assert.AreEqual(202, response.StatusCode);
    }

我尝试以两种不同的方式设置 DurableClientMock,但两者都不起作用,

        durableClientMock.Setup(x => x.ScheduleNewOrchestrationInstanceAsync(functionName It.IsAny<object>())).
ReturnsAsync(instanceId);

        durableClientMock.Setup(client => client.ScheduleNewOrchestrationInstanceAsync(It.IsAny<string>(), requestMock.Object))
            .ReturnsAsync("instanceId123");

显示错误:

c# unit-testing asp.net-core azure-functions mstest
1个回答
0
投票

您只需添加预期值即可解决此问题,这些值通常是可选的,但是起订量所要求的。

所以我认为设置

CancelationToken.None
如下:

durableClientMock.Setup(client => client.ScheduleNewOrchestrationInstanceAsync(nameof(MyOrchestrator), It.IsAny<MyInputType>(), CancelationToken.None).Returns(<Your desired String);

将使您的设置按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.