我正在为一个持久的函数编写单元测试.在此期间,我面临着一个关于持久任务客户端嘲笑的问题.我得到了一个错误在scheduleNewsStrationInstanceAsync模拟设置.

以下是单元测试代码:

    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在2种不同的方式,但两者都不工作,

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

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

Showing error : Image showing the error

推荐答案

正如@ Jalpa Panchals comments 中已经提到的,您可以通过为可选参数指定值来解决这个问题.

如果你从你的产品代码调用ScheduleNewOrchestrationInstanceAsync,你通常不必指定这些参数,但是Moq不允许你不设置可选参数.

因为看起来你正在使用需要3个参数的重载,我认为你只需要设置CancelationToken.None,如下所示.

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

这应该可以解决你的问题.

Csharp相关问答推荐

.NET框架4.7.2项目如何引用.NET Core 2.2库?

ASP.NET MVC购物车数量更新并从购物车中删除项目

数组被内部函数租用时,如何将数组返回给ArrayPool?

如何使用ConcurentDictionary属性上的属性将自定义System.Text.Json JsonConverter应用于该属性的值?

在发布表单时绑定包含附加(嵌套)列表的对象列表的正确语法是什么

dotnet集合中内部数组的局部变量副本的用途是什么?'

ASP.NET Core 8.0 JWT验证问题:尽管令牌有效,但SecurityTokenNoExpirationError异常

Razor视图Razor页面指向同一端点时的优先级

WinForms在Linux上的JetBrains Rider中的应用

C#和ASP.NET核心标识:提高GetUserAsync调用的性能

为什么无法将对象转换为泛型类型

为什么我的伺服电机不动,下面的代码?

JSON串行化程序问题.SQLite中的空值

岛屿和框架中的自定义控件库.Navigate-AccessViolationException

如何正确处置所有动态控件?

如何设置WinForms按钮焦点,使其看起来像是被Tab键插入其中?

如何消除Visual Studio错误,因为它不识别集合表达式的新C#12语法?

如何从原始图像到新创建的图像获得相同的特定 colored颜色 ,并且具有相同的 colored颜色 量和相同的宽度和高度?

与Visual Studio 2022中的.NET框架相比,如何在.NET Core 6中获取错误输出的窗口句柄

在SQL中删除少于24小时的令牌