如何模拟特定功能
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()
是否可以这样链接。
所以我正在设置一个函数,但我想尝试设置 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()
是否可以这样链接。