为什么在MVC中比在MVP和MVVM中更难进行单元测试

时间:2019-06-20 13:15:56

标签: android model-view-controller mvvm mvp android-mvvm

我一直在研究MVC / MPV / MVVM的优缺点,一个共同的主题是MVC比MVP和MVVM更难进行单元测试,但我不完全理解为什么。

根据我目前的理解,在MVC中,视图依赖于模型和控制器,因此要测试视图,必须模拟控制器和模型。 MVP / MVVM如何对此进行改进?

2 个答案:

答案 0 :(得分:4)

在MVC中,没有单独的组件来处理UI或Presentation逻辑。大多数情况下,它是在“视图”层(例如“活动”)中编写的。您必须依靠Robolectric之类的框架,该框架在编写单元测试时可以理解Android生态系统。这使得难以对演示逻辑进行单元测试。其他两种模式(MVP,MVVM)着重于借助界面和事件驱动模式来解耦Android依赖关系,从而简化了单元测试。 This博客详细解释了。

我建议探索Guide to app architectureClean architecture来构建高度模块化和可测试的应用程序。

答案 1 :(得分:3)

MVVMMVP相比,

MVC是实现单元测试的最佳选择,因为您可以为ViewModelModel层编写测试用例无需引用View并模拟其对象。

MVP也是一种很好的体系结构模式,但是与MVVM相比,它的弱点是您在Presenter层中引用了View,因此您需要在Presenter单元测试中使用Views引用。 / p>

MVC测试几乎类似于MVP,但主要问题在于,不仅您可以在View层访问Controller,而且可以访问{{ Model中的1}}层,这也使您的测试更加困难。

总的来说,与编写代码的代码解耦一样容易,并且MVVM体系结构在很大程度上提供了这种解耦。