我一直在研究MVC / MPV / MVVM的优缺点,一个共同的主题是MVC比MVP和MVVM更难进行单元测试,但我不完全理解为什么。
根据我目前的理解,在MVC中,视图依赖于模型和控制器,因此要测试视图,必须模拟控制器和模型。 MVP / MVVM如何对此进行改进?
答案 0 :(得分:4)
在MVC中,没有单独的组件来处理UI或Presentation逻辑。大多数情况下,它是在“视图”层(例如“活动”)中编写的。您必须依靠Robolectric之类的框架,该框架在编写单元测试时可以理解Android生态系统。这使得难以对演示逻辑进行单元测试。其他两种模式(MVP,MVVM)着重于借助界面和事件驱动模式来解耦Android依赖关系,从而简化了单元测试。 This博客详细解释了。
我建议探索Guide to app architecture和Clean architecture来构建高度模块化和可测试的应用程序。
答案 1 :(得分:3)
MVVM
和MVP
相比, MVC
是实现单元测试的最佳选择,因为您可以为ViewModel
和Model
层编写测试用例无需引用View并模拟其对象。
MVP
也是一种很好的体系结构模式,但是与MVVM
相比,它的弱点是您在Presenter层中引用了View,因此您需要在Presenter单元测试中使用Views引用。 / p>
MVC
测试几乎类似于MVP
,但主要问题在于,不仅您可以在View
层访问Controller
,而且可以访问{{ Model
中的1}}层,这也使您的测试更加困难。
总的来说,与编写代码的代码解耦一样容易,并且MVVM体系结构在很大程度上提供了这种解耦。