鼹鼠和内部课程

Mik*_*ike 1 .net c# unit-testing moles pex-and-moles

我们目前正在使用Moles来测试与第三方库交互的一些代码.该库未设置为非常好的测试(因此需要鼹鼠),我遇到的问题是它们只公开暴露一个抽象类.具体实现是第三方库的内部.

我面临的问题是,当尝试创建公共类型的实例时,它正在从鼹鼠请求具体类型,但是鼹鼠不会为这些类型生成鼹鼠对象,因为它们是内部的.

在moles文档下,公开内部的方法是在AssemblyInfo.cs文件中添加InternalsVisibleTo属性.然而,这是为了暴露我的程序集内部使用的痣,因为这些是已经创建的程序集的第三方库我不知道如何使这些内部可见,以便鼹鼠可以使用它们.

无论如何,对此的任何帮助都会很棒.我会满足于集成测试,这是唯一的解决方案,但希望不必去那一点.

Ada*_*lph 5

我非常成功地使用的一种方法是为不可迁移的第三方类型推送自己的代理类.例如,我想依赖于一个ThirdParty.Foo密封/静态/没有接口/等的类型.相反,我创建了一个名为的库ThirdParty.Proxies,FooIFoo为这个新库添加了具体类型和接口.该接口IFoo公开了与基础ThirdParty.Foo类型所需的所有成员等效的成员,具体类型ThirdParty.Proxies.Foo通过除了转发对底层第三方库的方法调用之外的任何其他操作来实现这些成员.ThirdParty.Proxies被排除在单元测试和代码覆盖范围之外.在我的消费程序集中ThirdParty.Proxies,我只接受了依赖项,具体来说,我只依赖于它IFoo.这样我就可以轻松地模拟这种依赖,并为我的消费组件获得100%的代码覆盖率.

这是一个更多的工作,它类似于Moles为你动态做的,但一旦完成它可以在任何地方重复使用,你的单元测试将更快,不会产生Moles的开销.