不支持的表达式:不可在设置/验证表达式中使用不可覆盖的成员(此处:)

时间:2019-07-12 06:49:29

标签: .net .net-core moq xunit

我正在使用xUnit和moq编写测试用例,并使用下面的代码创建Mock,但问题越来越突出。

enter image description here

BlobServiceProvider 类具有以下代码

enter image description here

问题:

  

不受支持的表达式:repo => repo.GetBlockBlobContainer(“ sample”)   不可覆盖的成员(此处:   BlobServiceProvider.GetBlockBlobContainer)不能在设置/   验证表达式。

我该如何解决以上问题

1 个答案:

答案 0 :(得分:0)

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

代理是如何构建的?

  • 如果您嘲笑interface代理仅仅是接口的实现
  • 如果您拥有class,则该代理将覆盖该类

问题:您可以模拟sealed class还是非virtualabstract)方法?

你猜,不是。无法使用动态代理在其周围创建包装器。 moq 本身也建议相同,如果您看到错误的话:

  

不可覆盖的成员(此处:   BlobServiceProvider.GetBlockBlobContainer)可能无法在设置中使用


要回答您的问题,您需要从提供程序中提取interface并对其进行模拟或将方法标记为虚拟。就个人而言,我确实更喜欢使用interface选项,但是它可能需要一些重构和DI。