所以我要设置一个函数,但是我想尝试设置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的函数,但是具有不同的参数,如何设置不同的参数?
答案 0 :(得分:3)
您似乎无法区分所显示的两个呼叫。我不确定您如何区分这两个电话。
如果您知道两个呼叫的顺序,则可以尝试使用SetupSequence。
mockStateFixture.MockCouchDbClient.SetupSequence(x => x.AuthenticatedQuery(
It.IsAny<Func<HttpClient, Task<HttpResponseMessage>>>(),
NamedHttpClients.COUCHDB,
httpClient))
.ReturnsAsync(httpResponseMessageForProfileRecordByUpn)
.ReturnsAsync(httpResponseMessageForCreatedReturnResult);
在SetupSequence()
调用之后,响应将按照您指定的顺序进行。
我还没有尝试过,所以我不确定ReturnsAsync()
是否可以这样链接。
答案 1 :(得分:1)
尝试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);