gpt4 book ai didi

c# - DocumentDB 存储库单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:01 24 4
gpt4 key购买 nike

我从这个post得到了引用他们似乎有一个针对 DocumentDB Repository 类的单元测试的有效解决方案。

[TestClass]
public class DocumentDBRepositoryShould {
/// <summary>
/// Fake IOrderedQueryable IDocumentQuery for mocking purposes
/// </summary>
public interface IFakeDocumentQuery<T> : IDocumentQuery<T>, IOrderedQueryable<T> {

}

[TestMethod]
public async Task ExecuteQueryAsync() {
//Arrange
var description = "BBB";
var expected = new List<MyDocumentClass> {
new MyDocumentClass{ Description = description },
new MyDocumentClass{ Description = "ZZZ" },
new MyDocumentClass{ Description = "AAA" },
new MyDocumentClass{ Description = "CCC" },

};
var response = new FeedResponse<MyDocumentClass>(expected);

var mockDocumentQuery = new Mock<IFakeDocumentQuery<MyDocumentClass>>();
mockDocumentQuery
.SetupSequence(_ => _.HasMoreResults)
.Returns(true)
.Returns(false);

mockDocumentQuery
.Setup(_ => _.ExecuteNextAsync<MyDocumentClass>(It.IsAny<CancellationToken>()))
.ReturnsAsync(response);

var client = new Mock<IDocumentClient>();

client
.Setup(_ => _.CreateDocumentQuery<MyDocumentClass>(It.IsAny<Uri>(), It.IsAny<FeedOptions>()))
.Returns(mockDocumentQuery.Object);

var cosmosDatabase = string.Empty;

var documentsRepository = new DocumentDBRepository<MyDocumentClass>(cosmosDatabase, client.Object);

//Act
var query = documentsRepository.GetQueryable(); //Simple query.

var actual = await documentsRepository.ExecuteQueryAsync(query);

//Assert
actual.Should().BeEquivalentTo(expected);
}
}

基本上,代码就是将查询结果与预期结果进行比较。但我不明白他们从哪里得到查询结果?他们查询的“假”数据库在哪里?例如,对于这行代码:

var实际=等待documentsRepository.ExecuteQueryAsync(query);

它调用哪个数据库?

最佳答案

此单元测试使用 Moq 创建 IFakeDocumentQuery 的模拟对象,该对象是实现 IDocumentQuery 的接口(interface)。

编写此代码的用户并不关心文档客户端将如何返回预期的数据。这就是为什么在这些行中

mockDocumentQuery
.SetupSequence(_ => _.HasMoreResults)
.Returns(true)
.Returns(false);

mockDocumentQuery
.Setup(_ => _.ExecuteNextAsync<MyDocumentClass>(It.IsAny<CancellationToken>()))
.ReturnsAsync(response);

他/她/他们设置模拟文档查询,以在使用任何 CancellationToken 调用 ExecuteNextAsync 方法并在这些行中返回特定响应

client
.Setup(_ => _.CreateDocumentQuery<MyDocumentClass>(It.IsAny<Uri>(), It.IsAny<FeedOptions>()))
.Returns(mockDocumentQuery.Object);

他/她/他们正在设置创建的文档查询以返回模拟的文档查询对象。

这个想法是单元测试应该与任何外部调用无关,这就是为什么我们在有外部调用时模拟响应。

关于c# - DocumentDB 存储库单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49887276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com