谢谢Marcin Wojciechowski。发布您的建议作为帮助其他社区成员的答案。
您可以实现自己的IHttpProvider 并将其传递给GraphServiceClient
IHttpProvider 模拟
public class MockRequestExecutingEventArgs
{
public HttpRequestMessage RequestMessage { get; }
public object Result { get; set; }
public MockRequestExecutingEventArgs(HttpRequestMessage message)
{
RequestMessage = message;
}
}
public class MockHttpProvider : IHttpProvider
{
public ISerializer Serializer { get; } = new Serializer();
public TimeSpan OverallTimeout { get; set; } = TimeSpan.FromSeconds(10);
public Dictionary<string, object> Responses { get; set; } = new Dictionary<string, object>();
public event EventHandler<MockRequestExecutingEventArgs> OnRequestExecuting;
public void Dispose()
{
}
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request)
{
return Task.Run(() =>
{
string key = "GET:" + request.RequestUri.ToString();
HttpResponseMessage response = new HttpResponseMessage();
if(OnRequestExecuting!= null)
{
MockRequestExecutingEventArgs args = new MockRequestExecutingEventArgs(request);
OnRequestExecuting.Invoke(this, args);
if(args.Result != null)
{
response.Content = new StringContent(Serializer.SerializeObject(args.Result));
}
}
if (Responses.ContainsKey(key) && response.Content == null)
{
response.Content = new StringContent(Serializer.SerializeObject(Responses[key]));
}
return response;
});
}
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
{
return SendAsync(request);
}
}
实现TestClass
[TestClass]
public class MeEndpointTests
{
[TestMethod]
public void MeEndpoint_GetMeInfo()
{
string requestUrl = "https://graph.microsoft.com/v1.0/me";
MockHttpProvider mockHttpProvider = new MockHttpProvider();
mockHttpProvider.Responses.Add("GET:" + requestUrl, new User()
{
DisplayName = "Test User"
});
GraphServiceClient client = new GraphServiceClient(new MockAuthenticationHelper(), mockHttpProvider);
User response = client.Me.Request().GetAsync().Result;
Assert.AreEqual("Test User", response.DisplayName);
}
[TestMethod]
public void MeEndpoint_GetMeInfo_OnRequestExecuting()
{
string requestUrl = "https://graph.microsoft.com/v1.0/me";
MockHttpProvider mockHttpProvider = new MockHttpProvider();
mockHttpProvider.OnRequestExecuting += delegate (object sender, MockRequestExecutingEventArgs eventArgs)
{
if(eventArgs.RequestMessage.RequestUri.ToString() == requestUrl)
{
eventArgs.Result = new User()
{
DisplayName = "Test User"
};
}
};
GraphServiceClient client = new GraphServiceClient(new MockAuthenticationHelper(), mockHttpProvider);
User response = client.Me.Request().GetAsync().Result;
Assert.AreEqual("Test User", response.DisplayName);
}
}
您可以参考Unit Testing Graph API SDK c#、As a developer, I want to mock Graph responses to test my integration with the Microsoft Graph client SDK和Unit testing with Graph SDK