簡體   English   中英

不包含“ReturnsAsync”的定義和最佳擴展方法重載

[英]does not contain defination for 'ReturnsAsync' and best extension method overload

無法調用此 function CallComplianceStarter...

收到錯誤 cs1929 Isetup<IworkFlowService, Task>'不包含'ReturnsAsync'和最佳擴展方法重載的定義

 public async Task<object> Get_Compliance_QueryParameter_ReturnsOkStatusCode()
        {
            //Arrange


           var mockServiceResult = new { TriggerFlow = "Test" };

            _mockService.Setup(x => x.CallComplianceStarter(It.IsAny<string>(), It.IsAny<MessageHeader>()))
            .ReturnsAsync(mockServiceResult);



            var workFlowsController = new WorkFlowsController(_mockController.Object, _mockService.Object);
            workFlowsController.ControllerContext = new ControllerContext();
            workFlowsController.ControllerContext.HttpContext = new DefaultHttpContext();
            //Act
            var result = await workFlowsController.Get("P");
            //Assert
            Assert.Equal(((ObjectResult)result).StatusCode, (int)HttpStatusCode.OK);
            return result;
        }

public async Task<WorkFlowsResponse> CallComplianceStarter(string flowName, MessageHeader messageHeader)
{
            
  // Imeplementation         
 return new WorkFlowsResponse { TriggerFlow = flowName };
           
}

選項 A

您應該將CallComplianceStarter簽名更改為同步的。

雖然 _mockService 確實有一個方法:

Task<WorkFlowsResponse> CallComplianceStarter(string flowName, MessageHeader messageHeader)

測試應該是

public WorkFlowsResponse CallComplianceStarter(string flowName, MessageHeader messageHeader)
{                
    // Imeplementation         
    return new WorkFlowsResponse { TriggerFlow = flowName };               
}

如果您注意ReturnsAsync簽名,您會看到它有一個只接受參數的重載: TResult value

public static IReturnsResult<TMock> ReturnsAsync<TMock, TResult>(this IReturns<TMock, Task<TResult>> mock, TResult value) where TMock : class;

選項 B

不知道為什么首先在測試中需要這個CallComplianceStarter 你只是從生產中復制它嗎? 我相信您只需要一個特定的返回值,例如new WorkFlowsResponse { TriggerFlow = "MyFlowName" }; .

並將其用於:

var expected = new WorkFlowsResponse { TriggerFlow = "MyFlowName" };
_mockService.Setup(x => x.CallComplianceStarter(It.IsAny<string>(), It.IsAny<MessageHeader>()))
.ReturnsAsync(expected); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM