我们目前正在使用Moles测试一些与第三方库交互的代码。这个库没有很好地进行测试(因此需要moles),我遇到的问题是它们只公开了一个抽象类。具体的实现是第三方库内部的。
我面临的问题是,当试图创建一个公共类型的实例时,它从moles请求一个具体的类型,但moles不会为这些类型生成moles对象,因为它们是内部的。
在moles文档中,公开内部结构的方法是在AssemblyInfo.cs文件中添加InternalsVisibleTo属性。然而,这是为了让moles使用我的程序集内部结构,因为这些是已经创建了程序集的第三方库,我不知道如何让这些内部结构可见,以便moles可以使用它们。
无论如何,在这方面的任何帮助都是很好的。我将满足于集成测试,这是唯一的解决方案,但希望不要走到那一步。
发布于 2011-11-12 06:53:51
我非常成功地使用的一种方法是为不可模拟的第三方类型滚动我自己的代理类。例如,我想要依赖于一个密封的/静态的/没有接口的ThirdParty.Foo类型。相反,我创建了一个名为ThirdParty.Proxies的库,并向这个新库添加了一个具体的类型Foo和一个接口IFoo。接口IFoo公开的成员等同于我从底层ThirdParty.Foo类型中需要的所有成员,而具体类型ThirdParty.Proxies.Foo只需将方法调用转发到底层第三方库,即可实现这些成员。ThirdParty.Proxies被排除在单元测试和代码覆盖率之外。在我的消费程序集中,我只依赖于ThirdParty.Proxies,具体地说,我只依赖IFoo。通过这种方式,我可以轻松地模拟这种依赖关系,并为我的使用程序集实现100%的代码覆盖率。
这是一项更多的工作,它类似于Moles动态为您做的事情,但一旦完成,它可以在任何地方重用,并且您的单元测试将会更快,因为不会产生Moles的开销。
https://stackoverflow.com/questions/8100813
复制相似问题