我应该重构以便能够使用 XCTests 进行模拟吗?

Posted

技术标签:

【中文标题】我应该重构以便能够使用 XCTests 进行模拟吗?【英文标题】:Should I refactor to be able to use mocking with XCTests? 【发布时间】:2018-12-07 02:12:11 【问题描述】:

我有一个当前的代码库,它的所有功能都在它的视图控制器中。这意味着在 SignUpViewController 中,我们有一个注册函数来进行注册。此外,我们还有一个 User 模型,但它没有任何会员注册功能。

为了在测试过程中使用mock和依赖注入,我应该重构代码让User模型有一个注册成员函数,而视图控制器的注册函数只是接收一个用户对象并调用该对象的成员注册功能?或者有更好的选择吗?

【问题讨论】:

这取决于它是单元测试还是集成测试。见test pyramid。如果它是一个单元测试,那么您可能希望能够模拟出依赖项以最小化每个单元测试的设置。 【参考方案1】:

一般规则:编写测试很难,你的架构很可能不好。

在您的情况下,在视图控制器中完成所有工作真的很糟糕。代码应该易于阅读和更改,因为这是我们开发人员一直在做的事情。

所以你应该改进你的架构。但我会在重构之前添加测试,以确保您不会添加错误。重构之后,您需要更改测试以适应更改后的架构。

【讨论】:

以上是关于我应该重构以便能够使用 XCTests 进行模拟吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Xcode 10 中的“XCtests 间歇性无法在模拟器中启动应用程序”

如果使用模拟器,从 Xcode 和 xcodebuild 运行 xctests 会失败 - dyld:未加载库:@rpath/libswiftSwiftOnoneSupport.dylib 问题 -

为了重构庞大的代码库,我应该记住啥?

多种产品的可重复使用 XCTests

IZT复杂电磁环境记录回放和模拟系统

我应该先启动 Cubit,然后再将代码重构为 Bloc 吗?