C# 单元测试活动功能时IBinder模拟失败
我正在尝试测试具有以下定义的活动函数:C# 单元测试活动功能时IBinder模拟失败,c#,unit-testing,moq,azure-functions,azure-durable-functions,C#,Unit Testing,Moq,Azure Functions,Azure Durable Functions,我正在尝试测试具有以下定义的活动函数: [FunctionName(nameof(LoadReferenceFromBlobStorage))] public static async Task<string> Run([ActivityTrigger] string blobName, IBinder binder, ILogger log) { StorageAccountAttribute storageAccountAtt = new StorageA
[FunctionName(nameof(LoadReferenceFromBlobStorage))]
public static async Task<string> Run([ActivityTrigger] string blobName,
IBinder binder,
ILogger log)
{
StorageAccountAttribute storageAccountAtt = new StorageAccountAttribute("AzureWebJobsStorage");
CloudStorageAccount storageAccount = await binder.BindAsync<CloudStorageAccount>(storageAccountAtt, CancellationToken.None);
CloudBlobClient client = storageAccount.CreateCloudBlobClient();
//...
}
测试成功调用活动,但binder.BindAsync
的结果始终为空
我遗漏了什么吗?您正在比较设置中的两个独立实例和测试中实际调用的实例 测试中的方法正在使用硬编码的
“AzureWebJobsStorage”
创建自己的StorageAccountAttribute
实例,同时测试正在使用另一个实例作为设置表达式。在执行测试时,这些将不匹配,因此模拟将按经验返回null
尝试使用It来放松设置。IsAny()
是期望表达式
//Arrange
CloudStorageAccount mockedResult = null;
CloudStorageAccount.TryParse("UseDevelopmentStorage=true;", out mockedResult);
var mock = new Mock<IBinder>();
mock
.Setup(x => x.BindAsync<CloudStorageAccount>(It.IsAny<StorageAccountAttribute>(), CancellationToken.None))
.ReturnsAsync(mockedResult);
ILogger logger = Mock.Of<ILogger>();
//Act
var res = await LoadReferenceFromBlobStorage.Run("name", mock.Object, logger);
//Assert
//...
//排列
CloudStorageAccount mockedResult=null;
TryParse(“UseDevelopmentStorage=true;”,out-mockedResult);
var mock=new mock();
嘲弄
.Setup(x=>x.BindAsync(It.IsAny(),CancellationToken.None))
.ReturnsAsync(mockedResult);
ILogger logger=Mock.Of();
//表演
var res=await loadreferencefrombrobstorage.Run(“name”,mock.Object,logger);
//断言
//...
这将允许
CloudStorageAccount storageAccount = await binder.BindAsync<CloudStorageAccount>(storageAccountAtt, CancellationToken.None);
CloudStorageAccount-storageAccount=await binder.BindAsync(storageAccountAtt,CancellationToken.None);
调用时按预期操作
关于<代码> SturtActActudioActudio>(代码)>硬编码的参数,您可能还想考虑重构,以便在测试时可以替换它,以便在测试时不使用存储的问题。
CloudStorageAccount storageAccount = await binder.BindAsync<CloudStorageAccount>(storageAccountAtt, CancellationToken.None);