如何模拟特定功能

How to mock a specific function

所以我正在设置一个函数,但我想尝试设置 2 个不同的参数,它们具有不同的 return 值,我该怎么做?

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 的函数,但它有不同的参数,我该如何设置不同的参数?

试试 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);

看起来您可能无法区分您显示的 2 个呼叫设置。我不确定您如何区分这两个调用。

如果您知道这 2 个调用的顺序,您可以尝试使用 SetupSequence

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

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

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