gpt4 book ai didi

.net - 不支持的表达式 : Non-overridable members (here: ) may not be used in setup/verification expressions

转载 作者:行者123 更新时间:2023-12-04 22:07:05 25 4
gpt4 key购买 nike

我正在使用 xUnit 和 Moq 来编写测试用例。我正在使用下面的代码来创建一个 Mock,但我得到了突出显示的问题。
Picture of code and error pasted below

CloudBlockBlob source = null;
AccessCondition sourceAccessCondition = null;
AccessCondition destAccessCondition = null;
BlobRequestOptions options = null;
OperationContext operationContext = null;
CloudBlobContainer container = new CloudBlobContainer(uri);
Task task = null;
DeleteSnapshotOption deleteSnapshotOption = new DeleteSnapshotOption();

var mockCloudBlobClient = new Mock<Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient>();
mockCloudBlobClient.Setup(repo => repo.GetContainerReference("sample")).Returns(container);

var mockCloudBlobContainer = new Mock<Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer>(uri);
mockCloudBlobContainer.Setup(repo => repo.GetBlockBlobReference("sample")).Returns(new CloudBlockBlob(uri));

var mockBlobServiceProvider = new Mock<BlobServiceProvider>();
mockBlobServiceProvider.Setup(repo => repo.GetBlockBlobContainer("sample")).Returns(new CloudBloblContainer(new Uri("http://mytest")));
mockBlobServiceProvider.Setup(repo => repo.GetBlockBlobContainer("sample")).Returns(new CloudBloblContainer(new Uri("http://mytest")));给我这个错误:

System.NotSupportedException: 'Unsupported expression: repo => repo.GetBlockBlobContainer("sample")

Non-overridable members (here: BlobServiceProvider.GetBlockBlobContainer) may not be used in setup / verification expressions.'


类(class) BlobServiceProvider :
Public Class BlobServiceProvider
{
public CloudBlobContainer GetBlockBlobContainer(string containerName)
{
CloudBlobContainer Container = blobClient.GetContainerReference(containerName);
Container.CreateIfNotExistsAsync();
return Container;
}
}
我该如何解决这个问题?

最佳答案

moq 使用 dynamic proxy围绕模拟类型创建包装器,以便能够拦截调用并更改调用方法的行为。

代理是如何构建的?

  • 如果你 mock interface proxy 只是接口(interface)
  • 的一个实现
  • 如果您有 class代理是类
  • 的覆盖


    问:你能模拟一下 sealed class吗?或非 virtual ( abstract ) 方法?

    你猜,没有。无法使用动态代理围绕它创建包装器。 moq 如果您查看错误,它本身暗示相同:

    Non-overridable members (here: BlobServiceProvider.GetBlockBlobContainer) may not be used in setup



    要回答您的问题,您需要提取 interface从您的提供者中取出并模拟它或将该方法标记为虚拟。就个人而言,我更喜欢 interface 的选项但它可能需要一些重构和 DI。

    关于.net - 不支持的表达式 : Non-overridable members (here: ) may not be used in setup/verification expressions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57001556/

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