非MVVM模式Xamarin Forms项目单元测试相关问题咨询
Xamarin Forms非MVVM场景单元测试问题解答
1. 不使用MVVM模式的Xamarin Forms项目是否可以进行单元测试
可以实现单元测试,但可覆盖的范围和测试成本和你的代码耦合度直接相关:
- 完全不依赖UI的纯业务逻辑(比如工具类、数据计算方法、接口请求封装、实体类处理逻辑)可以直接测试,和常规.NET类库的单元测试写法完全一致,直接使用xUnit、NUnit、MSTest等测试框架即可编写用例
- 若逻辑耦合在页面后台代码(xaml.cs)的UI事件回调中,你可以先把和UI控件操作无关的逻辑抽成独立的公共方法,再针对抽离出的方法编写测试
如果你的代码逻辑全部和UI控件操作强绑定(比如按钮点击事件内直接写了从控件取值、计算、再给其他控件赋值的全流程逻辑),单元测试很难覆盖这部分内容:单元测试运行环境没有Xamarin Forms的UI渲染上下文,无法直接实例化页面控件,手动模拟控件对象的成本远高于测试本身的价值。
2. 这类项目是否更建议先实现MVVM模式再添加单元测试
如果项目需要长期迭代、对测试覆盖率有明确要求,优先重构到MVVM模式是性价比更高的选择:
- MVVM的核心优势之一就是实现UI层和业务逻辑的解耦,ViewModel层完全不依赖任何UI控件,所有业务逻辑都可以直接在测试环境中实例化调用,测试用例编写成本极低,可覆盖范围也能达到最高
- 如果你暂时没有全量重构MVVM的资源,也可以先把xaml.cs中与UI操作无关的逻辑抽离为独立的业务服务类,优先针对这部分抽离出的代码添加单元测试,不用一步到位完成全量重构。
内容的提问来源于stack exchange,提问作者heticWyllis
相关产品推荐
相关产品推荐

