我在一个项目中遇到了问题,我们在其中遇到了一些第三方类的问题。问题在于我们无法从第三方实例化类,因为我们仅获得元数据表示,但是可以通过适配器模式来解决。问题在于我们需要进行单元测试的类实现了第三方接口:
public class OurClass: ThirdPartyInterface
{
}
这些接口返回第三方类(我们可以通过适配器模式包装这些类),但它们将作为原始类返回。因此,我们需要以某种方式创建某种适配器接口系统。
到目前为止,我们最好的主意是创建一个实现ThirdpartyInterface的类(FacadeThirdParty),然后将来自接口(TPClass)的第三方类包装到适配器类(TPClassAdapter)中,然后通过我们自己的接口发送它(OurClass)实现的(IFacadeThirdPartyInterface):
这样,我们可以Moq我们的IFacadeThirdPartyInterface和适配器类接口,而不会被第三方所打扰。这个主意好吗?我觉得可能会有更好的方法。
更新:提出了新的解决方案
因此,经过一番思考和评论中所说的话,我认为我有一个可行的新解决方案:
我可能没有很好解释的问题是第三方系统使用的回调函数。因此,我在这里所做的是,我们需要进行单元测试的“ OurClass”。现在它将与Facade层进行对话,并通过IFacadeCallback接口获取回调。所有第三方接口都将在facade类中实现。当这些接口之一执行对外观的调用时,它将通过IFacadeCallback外观将其重定向。如果调用具有第三方类,它将把它们包装在适配器类中并返回该类的接口(ITPClass)。从理论上讲,这应该隔离“ OurClass”,以便我可以使用Moq来测试其功能。
答案 0 :(得分:0)
我要做的是代替使用适配器模式,而是将对第三方的依赖项注入到要测试的类中,例如
public class OurClass
{
public OurClass(IThirdPartyInterface thirdParty)
{
_thirdParty = thirdParty;
}
private readonly IThirdPartyInterface _thirdParty;
}
接口IThirdPartyInterface
将是一个简单的接口,具有您在ThirdPartyInterface
类中的代码中所需的方法/属性。
通过这种方式,您可以轻松模拟此类具有的依赖项,此外,它还基于依赖关系反转原理。