假程序集在为接口生成填充程序和为密封类型生成存根时显示警告

本文关键字:存根 类型 密封类 警告 显示 密封 程序 程序集 接口 填充 | 更新日期: 2023-09-27 18:35:30

我有一个配置了 CI 帖子的构建,运行一些测试。尽管测试成功运行,但生成会显示警告:

:无法为 StructuremapMvc 生成存根:类型是密封的。 :无法为 IUnitOfWork 生成填充程序:类型是一个接口。 :无法为 Repository.IRepository'1 生成填充程序:类型是一个接口。

等等。

我正在使用通用存储库模式以及工作单元。我已经为我的MVC WebApi项目(它利用StructureMap的依赖注入)和包含我的存储库和UnitOfWork的数据项目添加了假程序集。我已经探索了这个错误,似乎有点相信这可能是由于假程序集的限制,但我需要绝对确定我没有做错任何事

假程序集在为接口生成填充程序和为密封类型生成存根时显示警告

我摆脱这些警告的方法是只创建所需的垫片。我将以下内容添加到假货配置文件中。

  <ShimGeneration>
    <Clear/>
    <Add FullName="ATypeToShim!"/>
    <Add FullName="AnotherTypeToShim!"/>
  </ShimGeneration>

筛选器末尾的 ! 使其成为区分大小写的精确匹配。

对于存根,我只使用存根接口,所以很容易:

<StubGeneration>
  <Clear />
  <Add Interfaces ="true"/>
</StubGeneration>

这里有更多细节:http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_type_filtering

这不是假货的限制,但也不是真正的错误。您需要知道的是存根和垫片是什么。

存根

很简单:它们是实现或扩展某个类的类,使用委托属性和确定之后是否应该调用基类的标志覆盖每个方法(注意:该标志适用于整个存根,而不是每个方法)。您可以使用它们来注入依赖项,因为它们允许您在代码中的 lambda 中找到所有逻辑,而不是在某处生成的类中找到。由于它们扩展了非接口,因此无法存根密封类。

填充码更复杂,因为它们适用于指定类型的任何实例。不确定这是如何完成的,但对您来说重要的是,由于接口不能有实例,因此它不能有填充程序。这很好,因为这是您应该使用存根的地方。它们很危险,因为使用填充程序,您可以覆盖整个 shimscontext 中函数的结果,并且几乎完全是在您无法访问的某些东西中断时 - 最好注入的东西。

所以我不会担心警告。他们并不是真正关心任何重要的事情,只是确保你知道发生了什么。