我有一個帶有 blob 觸發器的 Azure 函式,在我的函式方法 args 中,我通過 BlobClient 公開了 Blob 本身并上傳了檔案的名稱。
[FunctionName("MyFunc")]
public async Task RunAsync([BlobTrigger("upload/{name}", Connection = "DataLake")]
BlobClient blob, string name)
{
var propertiesResponse = await blob.GetPropertiesAsync();
var properties = propertiesResponse.Value;
var metadata = properties.Metadata;
//do stuff with metadata
if (metadata.TryGetValue("activityId", out var activityId))
{
}
using (var stream = await blob.OpenReadAsync())
using (var sr = new StreamReader(stream))
{
//do some stuff with blob
}
}
我想對這個函式進行單元測驗,并試圖模擬 BlobClient 但在使用 Moq 庫時遇到問題。我找到了旨在幫助模擬的 BlobsModelFactory,但我看不到 BlobClient 的任何內容。有沒有人設法模擬 BlobClient?
uj5u.com熱心網友回復:
根據新的Azure SDK 指南,標記了公共方法,virtual以便可以模擬它們:
服務客戶端是 Azure SDK 庫中開發人員的主要入口點。因為客戶端型別實作了與 Azure 服務通信的大部分“實時”邏輯,所以能夠創建一個客戶端的實體并按預期運行而無需進行任何網路呼叫,這一點很重要。
- 每個 Azure SDK 客戶端都遵循允許覆寫其行為的模擬指南:
- 每個客戶端至少提供一個受保護的建構式以允許繼承進行測驗。所有公共客戶端成員都是虛擬的以允許覆寫。
在BlobClient模擬的情況下可以這樣做*:
var mock = new Mock<BlobClient>();
var responseMock = new Mock<Response>();
mock
.Setup(m => m.GetPropertiesAsync(null, CancellationToken.None).Result)
.Returns(Response.FromValue<BlobProperties>(new BlobProperties(), responseMock.Object))
附加參考:
- https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/core/Azure.Core/README.md#mocking
- https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/core/Azure.Core/samples/Mocking.md
*代碼僅用于演示,參考提供了如何使用 BlobsModelFactory 的線索
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/406465.html
標籤:
