【发布时间】:2021-02-18 21:38:13
【问题描述】:
我正在创建一个使用 Microsoft Graph SDK 的服务,该服务具有从 Active Directory 检索所有应用程序的方法。最初我只考虑了一个页面来编写该方法,并成功地模拟了单元测试中的调用,如下所示。
方法
public async Task<IList<Application>> GetAllApplicationsAsync()
{
var applicationFirstPage = await _graphServiceClient.Applications
.Request()
.GetAsync();
return applicationFirstPage;
}
单元测试
[Test]
public async Task GetAllApplicationsAsync_NoApplications_ReturnsEmptyAsync()
{
// Arrange
var graphServiceClientMock = new Mock<IGraphServiceClient>();
// Create an empty page of applications
GraphServiceApplicationsCollectionPage page = new GraphServiceApplicationsCollectionPage { };
graphServiceClientMock.Setup(m => m.Applications.Request().GetAsync()).ReturnsAsync(() => page);
var graphClient = new GraphClient(graphServiceClientMock.Object);
// Act
var apps = await graphClient.GetAllApplicationsAsync();
// Assert
Assert.That(apps, Is.Empty);
}
然后我继续从默认查询扩展该方法并遍历所有页面以获取所有应用程序的列表。我使用了PageIterator,如docs 中所述。当我去更新单元测试时,我一直在努力调整它们以包含PageIterator。
调用 await pageIterator.IterateAsync(); 会引发 null ref 异常,我想不出我将如何模拟或绕过它。
扩展方法
public async Task<IList<Application>> GetAllApplicationsAsync()
{
var applicationFirstPage = await _graphServiceClient.Applications
.Request()
.GetAsync();
List<Application> applications = new List<Application>();
var pageIterator = PageIterator<Application>
.CreatePageIterator(_graphServiceClient, applicationFirstPage, (a) =>
{
applications.Add(a);
return true;
});
await pageIterator.IterateAsync();
return applications;
}
对于如何通过单元测试涵盖此方法的任何帮助或建议,我将不胜感激。提前致谢。
【问题讨论】:
标签: c# unit-testing microsoft-graph-api microsoft-graph-sdks