为什么 MVC 中的单元测试比 MVP 和 MVVM 更难

use*_*764 7 model-view-controller mvp android mvvm android-mvvm

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

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

Jeg*_*abu 5

在 MVC 中,没有单独的组件来处理 UI 或表示逻辑。大多数时候,它是写在View层(例如Activity)中的。你必须依赖像Robolectric这样的框架,它可以在编写单元测试时了解 Android 生态系统。这使得对表示逻辑进行单元测试变得困难。另外两种模式(MVP、MVVM)侧重于借助接口和事件驱动模式来解耦 Android 依赖关系,从而简化单元测试。这个博客解释得更详细。

我建议探索应用程序架构指南清洁架构,以构建高度模块化和可测试的应用程序。


Squ*_*uti 5

MVVMMVP与和相比,是实现单元测试的最佳选择,因为您可以为和层MVC编写测试用例,而无需引用视图并模拟其对象。ViewModelModel

MVP也是一个很好的架构模式,但它的弱点MVVM是您在 Presenter 层中引用了 View,因此您需要在 Presenter 单元测试中处理视图引用。

MVC测试几乎是一样的MVP,但它的主要问题是,您不仅可以访问View该层,而且还Controller可以访问Model您的层,这使得您的测试变得更加困难。View

总体而言,尽管代码解耦,但编写单元测试会更容易,并且 MVVM 架构在很大程度上提供了这种解耦。