代码之家  ›  专栏  ›  技术社区  ›  Alex 75

f-如何调用moq returnsasync()?

  •  0
  • Alex 75  · 技术社区  · 5 年前

    我有一个函数返回 Task<bool> (C)。

    Task<bool> Update(MemberMarketUpdate memberMarketUpdate);
    

    我想用moq(f)来模仿它。

    let verifyUpdate(update:MemberMarketUpdate) =
        update.Id |> should equal "market id"
    
    let setup = associationRepository.Setup (fun r -> r.Update(It.IsAny<MemberMarketUpdate>() ))
    setup.Callback(fun update -> verifyUpdate update) |> ignore
    //setup.Returns(Task.FromResult(True)) <- does not compile
    //setup.ReturnsAsync(True)  <- does not compile
    

    我不能用 ReturnsAsync(True) 嘲弄 任务<bool> 结果。

    错误说:

    没有与方法returnsAsync匹配的重载。可用的重载 如下所示。
    (这里有35个过载)

    正确的语法是什么?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Tomas Petricek    5 年前

    我试图让你的代码在一个简单的F脚本文件中进行类型检查,我唯一要做的就是改变你的大写字母。 True 小写字母 true .

    我输入的完整脚本检查良好,包括所有必要的定义和引用,如下所示:

    #r @"packages\Moq\lib\net45\Moq.dll"
    #r @"packages\NUnit\lib\net45\nunit.framework.dll"
    #r @"packages\FsUnit\lib\net46\FsUnit.NUnit.dll"
    #r @"packages\System.Threading.Tasks.Extensions\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll"
    open Moq
    open FsUnit
    open System.Threading.Tasks
    
    type MemberMarketUpdate = 
      { Id: string }
    
    type IAssociationRepository = 
      abstract Update : MemberMarketUpdate -> Task<bool>
    
    let verifyUpdate(update:MemberMarketUpdate) =
        update.Id |> should equal "market id"
    
    let associationRepository = new Mock<IAssociationRepository>();
    let setup = associationRepository.Setup (fun r -> r.Update(It.IsAny<MemberMarketUpdate>() ))
    setup.Callback(fun update -> verifyUpdate update) |> ignore
    setup.Returns(Task.FromResult(true))
    setup.ReturnsAsync(true)
    
        2
  •  1
  •   Nkosi    5 年前

    我对f不太熟悉,但如果可能的话,可以试着用下面的一个流利的调用来完成。

    associationRepository
        .Setup(fun r -> r.Update(It.IsAny<MemberMarketUpdate>()))
        .Callback(fun update -> verifyUpdate update)
        .ReturnsAsync(True) |> ignore