我正在创建一个使用Microsofts的服务,它具有从Active检索所有应用程序的方法。最初,我在编写方法时只考虑了一个页面,并成功地模拟了单元测试中的调用,如下所示。
方法
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
,如文档中所概述的那样。当我去更新单元测试时,我一直在努力调整它们以包括PageIterator
。
调用await pageIterator.IterateAsync();
会抛出一个空引用异常,我想不出我是如何嘲笑或绕过它的。
扩展方法
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;
}
对于如何用单元测试来覆盖这个方法,我会非常感激的。提前谢谢。
发布于 2021-02-19 08:29:45
pageIterator.IterateAsync()
内部访问page.AdditionalData
,但是AdditionalData
没有在GraphServiceApplicationsCollectionPage
的构造函数中初始化。
您必须初始化AdditionalData
。
GraphServiceApplicationsCollectionPage page = new GraphServiceApplicationsCollectionPage
{
AdditionalData = new Dictionary<string, object>()
};
https://stackoverflow.com/questions/66268527
复制相似问题