在构造函数的逻辑出现之前将模拟注入类



想象一下,我们有一个类,其中构造函数内部执行了许多逻辑。

问题:如何在执行构造函数之前在该类中注入模拟?

附加信息:

这个课程不是我写的,我不想通过可检验的原因改变其结构来违反此类的现有界面。值得一提的是,它是一个ViewModel的类实例,并且在其实例化上,它使用此ViewModel的字段在RXJAVA2 Flow中运行身份验证检查以获取所需的可观察到。

因此,它甚至在@injectsmocks注释进来之前就抛出NullPoInterException。如果我尝试不尝试在测试类ViewModel的字段声明中实例化ViewModel,则由于" MockitoException"而失败,这是由于尝试使用Mockito本身而引起的。实例化一个意图在此之后注入模拟的对象,但是构造函数已经失败了。

因此,甚至可以解决此问题而不会违反"不要更改测试"规则?

唯一的真实在这里回答:您将时间和精力投入错误的地方。

您看到:

我们有一个类,其中构造函数内部执行了许多逻辑

抗模式。一次:因为它使您的班级如此艰难。您完全陷入这种情况:有意义的解决您的依赖项几乎是不可能的。如果您发现代码难以测试,那么这通常是不良设计的直接结果。因此,对您的代码进行重构不仅可以使其可测试,还可以显着提高其质量!

但是您的"解决方案"是将模拟框架魔术用作创可贴。但这是错误的方法:因为您仍然无法轻易实例化"正在测试的对象"。随着时间的流逝,这个问题将在其他各种症状中表现出来。

从某种意义上说:学习如何编写可测试代码 - 例如观看这些视频。

如果您真的想要/必须像它一样保留该课程 - 那么请考虑使用依赖项注入框架(例如Guice(。

相关内容

  • 没有找到相关文章

最新更新