使用单元测试时避免运行部分代码

Posted

技术标签:

【中文标题】使用单元测试时避免运行部分代码【英文标题】:Avoid run part of code when use Unit test 【发布时间】:2017-11-27 15:39:23 【问题描述】:

我希望在运行应用程序进行单元测试时不执行我的部分代码,问题是我的功能之一是将一个对象保存在 BD 中,我想避免这种情况。

api.getUsers(completion:(objects)
//In this response I save the object in BD
)

【问题讨论】:

定义一个用于测试的方案变量并检查该变量是否为假以执行该代码 查看这个答案***.com/questions/45659435/… 为什么不直接使用(连接)一个全新的数据库进行测试? 设计越好,测试就越容易。 “这很难测试”的感觉试图告诉你一些事情:设计可以改进。寻找方法将持久性提取到一个单独的、可替换的类中。 【参考方案1】:

我不认为你真的想在运行时有条件地执行某些东西,如果你正在运行单元测试。恕我直言,这将是一个糟糕的主意。

您可能希望在单元测试中创建一个 api 类的 mock 对象,然后将模拟版本注入您正在测试的类中。

【讨论】:

【参考方案2】:

您的操作系统是否具有环境价值?在 React 中,我通过检查 process.env.NODE_ENV !='test'

来解决这个问题

【讨论】:

【参考方案3】:

您可以在方案属性(测试部分)中设置启动时参数,例如 isTestYES

并且,在你的函数中使用这个:

BOOL isTest = [[NSUserDefaults standardUserDefaults] boolForKey:@"isTest"];

【讨论】:

显然无法从NSUserDefaults 读取启动参数。为了使它起作用,您需要阅读ProcessInfo.processInfo.launchArguments。投票否决,因为 OP 可能希望对此采取稍微不同的方法。

以上是关于使用单元测试时避免运行部分代码的主要内容,如果未能解决你的问题,请参考以下文章

在单元测试期间避免在EF Core 2.2中使用HasData Seed DbContext

Junit单元测试

运行测试单元时出现 VUE 错误

运行单元测试时禁用 Django South?

带有自定义类型的角度单元测试给出了找不到命名空间

使用Jasmine进行单元测试时避免副作用