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

10

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

根据我的理解,在MVC中,视图依赖于模型和控制器,因此为了测试视图,必须对控制器和模型进行模拟。而MVP/MVVM如何改进这一点呢?


1
我这样理解MVVM:由于所有业务逻辑都应该在ViewModel中,而View(activity、fragment)仅负责根据ViewModel发出的数据更新UI,因此您可以将所有业务逻辑进行隔离测试。 - Rinat Diushenov
1
https://www.angularminds.com/blog/article/mvc-vs-mvp-mvvm.html - MMG
https://medium.com/@sreeharikv112/android-unit-testing-clean-code-architecture-with-mvvm-73eb2992cab7 - Sreehari
2个回答

5

MVVMMVPMVC更适合实现单元测试,因为你可以为ViewModelModel层编写测试用例,而无需引用View并模拟它的对象。

MVP也是一种好的架构模式,但与MVVM相比,其缺点是你需要在Presenter层引用View,因此你需要在Presenter单元测试中解决View引用的问题。

MVC的测试几乎与MVP相似,但其主要问题是不仅在Controller层可以访问View,而且在View中也可以访问Model层,这使得你的测试更加困难。

总的来说,只要你的代码是松耦合的,编写单元测试就会更容易,而MVVM架构在很大程度上提供了这种松耦合。


VM 和 Presenter 在功能上完全相同。那么这意味着什么,“使用 MVVM,您在 Presenter 层中引用了 View,因此您需要在 Presenter 单元测试中努力处理视图引用”? - Raja Saad

5

MVC中,没有单独的组件来处理UI或者表示层逻辑。大部分时间里,这部分代码会被写在View层(例如Activity)中。在编写单元测试时,你需要依赖像Robolectric这样的框架,它可以理解Android生态系统。这使得对表示层逻辑进行单元测试变得更加困难。而MVP和MVVM两个模式则专注于通过接口和事件驱动模式将Android依赖性解耦,从而简化单元测试。这篇博客更加详细地解释了这一点。

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


你能更详细地描述一下Roboelectric在MVC中是如何让生活变得困难的吗? - Haris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接