Tin*_*inu 11 c# structuremap unit-testing irepository microsoft-fakes
我有一个配置了CI帖子的构建,运行了一些测试.虽然测试成功运行,但构建显示警告:
:无法为StructuremapMvc生成存根:type已密封.:无法为IUnitOfWork生成填充程序:type是一个接口.:无法为Repository.IRepository`1生成填充程序:type是一个接口.
等等.
我正在使用通用存储库模式以及工作单元.我为我的MVC WebApi项目(利用StructureMap利用依赖注入)和包含我的存储库和UnitOfWork的数据项目添加了Fake Assemblies.我已经探究过这个错误并且似乎有点确信这可能是由于假装配的限制,但我需要绝对确定我没有做错任何事
use*_*816 18
我摆脱这些警告的方式是只创建所需的垫片.我在fakes配置文件中添加了以下内容.
<ShimGeneration>
<Clear/>
<Add FullName="ATypeToShim!"/>
<Add FullName="AnotherTypeToShim!"/>
</ShimGeneration>
Run Code Online (Sandbox Code Playgroud)
的!在过滤器的末尾使它成为一个精确区分大小写的匹配.
对于存根,我只有存根接口所以它很容易:
<StubGeneration>
<Clear />
<Add Interfaces ="true"/>
</StubGeneration>
Run Code Online (Sandbox Code Playgroud)
这里有更多细节:http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_type_filtering
这并不是真正的假货限制,但也不是真正的错误。您需要知道什么是存根和垫片。
存根很简单:它们是一个实现或扩展某个类的类,使用委托属性和一个标志来重写每个方法,该标志确定之后是否应该调用基类(注意:该标志适用于整个存根,而不是每个方法) 。您可以使用它们来注入依赖项,因为它们允许您将所有逻辑定位在代码中的lambda 中,而不是在某个生成的类中。因为它们扩展了非接口,所以密封类不能被存根。
垫片更复杂,因为它们适用于指定类型的任何实例。不确定这是如何完成的,但对您来说重要的是,由于接口不能有实例,所以它不能有垫片。没关系,因为那是您应该使用存根的地方。它们很危险,因为使用填充程序,您可以覆盖整个填充程序上下文中函数的结果,并且几乎完全是在您无权访问的某些内容发生故障时(最好注入一些内容)。
所以我不会担心这些警告。它们并不是真正重要的事情,只是确保您知道发生了什么。