【问题标题】:How to mock a specific function如何模拟特定功能
【发布时间】:2019-04-05 18:47:31
【问题描述】:

所以我正在设置一个函数,但是我想尝试设置 2 个不同的参数并且有不同的返回值,我该怎么做?

mockStateFixture.MockCouchDbClient.Setup(x => x.AuthenticatedQuery(
   //It.IsAny<Func<HttpClient, Task<HttpResponseMessage>>>(), First Parameter Function# 1: GetProfileByUpn Function
   NamedHttpClients.COUCHDB,
   httpClient))
  .ReturnsAsync(httpResponseMessageForProfileRecordByUpn);


mockStateFixture.MockCouchDbClient.Setup(x => x.AuthenticatedQuery(
    //It.IsAny<Func<HttpClient, Task<HttpResponseMessage>>>(), First Parameter Function# 2: UpdateProfile Function
    NamedHttpClients.COUCHDB,
    httpClient))
   .ReturnsAsync(httpResponseMessageForCreatedReturnResult);

所以第一个参数应该与第二个参数不同,它们有不同的第一个参数。

我正在设置一个名为 AuthenticatedQuery 但具有不同参数的函数,如何设置不同的参数?

【问题讨论】:

    标签: c# unit-testing moq xunit


    【解决方案1】:

    您似乎无法区分您设置的 2 个呼叫。我不确定你如何区分这两个电话。

    如果您知道两次调用的顺序,可以尝试使用SetupSequence

    mockStateFixture.MockCouchDbClient.SetupSequence(x => x.AuthenticatedQuery(
        It.IsAny<Func<HttpClient, Task<HttpResponseMessage>>>(),
        NamedHttpClients.COUCHDB,
        httpClient))
      .ReturnsAsync(httpResponseMessageForProfileRecordByUpn)
      .ReturnsAsync(httpResponseMessageForCreatedReturnResult);
    

    响应将按照您在SetupSequence() 调用之后指定的顺序。

    我还没有尝试过,所以我不确定ReturnsAsync() 是否可以这样被链接。

    【讨论】:

      【解决方案2】:

      试试 FakeItEasy -

      IMockedInterface mock = A.Fake<IMockedInterface>();
      
      Object result1 = new {};
      Object result2 = new {};
      
      A.CallTo(() => mock.MethodName(1)).Returns(Object1);
      A.CallTo(() => mock.MethodName(2)).Returns(Object2);
      

      【讨论】:

      • 所以你想根据输入参数得到不同的结果?
      • 是的,我想要根据不同的输入参数得到不同的结果
      • @DavidMcEleney 请阅读markdown。我已经编辑了您的答案,以使其中的代码看起来像代码。现在,在您最后一次编辑之后,它看起来像一个纯文本。只需在代码前添加 4 个空格即可完成
      • @Aleks - 我在公共汽车上用我的 iPhone 打字? 但我以后会更加努力?
      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多