我正在尝试为持久功能编写单元测试。在那段时间里,我面临着关于 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");
您只需添加预期值即可解决此问题,这些值通常是可选的,但是起订量所要求的。
所以我认为设置
CancelationToken.None
如下:
durableClientMock.Setup(client => client.ScheduleNewOrchestrationInstanceAsync(nameof(MyOrchestrator), It.IsAny<MyInputType>(), CancelationToken.None).Returns(<Your desired String);
将使您的设置按预期工作。