Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 如果每个开发人员都在推送之前运行测试,那么我们是否需要在CI服务器中运行测试?_Maven_Unit Testing_Jenkins_Continuous Integration - Fatal编程技术网

Maven 如果每个开发人员都在推送之前运行测试,那么我们是否需要在CI服务器中运行测试?

Maven 如果每个开发人员都在推送之前运行测试,那么我们是否需要在CI服务器中运行测试?,maven,unit-testing,jenkins,continuous-integration,Maven,Unit Testing,Jenkins,Continuous Integration,我不确定运行单元测试的最佳实践是什么 我认为每个开发人员在将代码推送到GIT repo之前都应该在本地通过单元测试。然后CI服务器(Jenkins)将接收新的更改并再次运行测试。 为什么我们要做两次?我们应该吗 如果单元测试需要花费大量的时间来运行,我们是否希望开发人员只选择与变更相关的测试,或者运行每个测试(即使在他的项目范围之外),假设我们有一个大型maven多模块POM 还认为我们通常为CI服务器提供了强大的硬件,而开发人员的工作站则相对较弱。 是的,它们应该运行两次。因为如果一些开发人员

我不确定运行单元测试的最佳实践是什么

我认为每个开发人员在将代码推送到GIT repo之前都应该在本地通过单元测试。然后CI服务器(Jenkins)将接收新的更改并再次运行测试。 为什么我们要做两次?我们应该吗

如果单元测试需要花费大量的时间来运行,我们是否希望开发人员只选择与变更相关的测试,或者运行每个测试(即使在他的项目范围之外),假设我们有一个大型maven多模块POM


还认为我们通常为CI服务器提供了强大的硬件,而开发人员的工作站则相对较弱。

是的,它们应该运行两次。因为如果一些开发人员不这样做,那么他们永远不会运行。开发人员应该在本地运行测试,以确保其代码正常工作

然而,您的CI系统是您的参考,因此不可能有人认为它“在我的机器上工作”,但对其他人来说却失败了。期待着持续交付,了解CI/CD系统的这种状态变得更加重要


您可能希望每次提交都能在本地成功测试(并且所有工作站都与生产系统相同),但希望不是一个好策略。

是的,它们应该运行两次。因为如果一些开发人员不这样做,那么他们永远不会运行。开发人员应该在本地运行测试,以确保其代码正常工作

然而,您的CI系统是您的参考,因此不可能有人认为它“在我的机器上工作”,但对其他人来说却失败了。期待着持续交付,了解CI/CD系统的这种状态变得更加重要

您可能希望每次提交都能在本地成功地进行测试(并且所有工作站都与生产系统相同……),但希望不是一个好策略

如果单元测试需要花费大量的时间来运行,我们是否期望 开发人员只挑选与变更相关的测试,或者每周一次运行一次 测试(即使在他的项目范围之外),假设我们有一个大的 maven多模块POM

当开发人员更改类、修改数据库结构或做出任何可能产生副作用的更改时,他/她将不会/无法知道整个应用程序的所有潜在副作用。
他/她永远不必太聪明地说:“我知道它可能已经被我的改变打破了,所以我将只运行这个测试”

单元测试可以确保一定程度的代码质量:不要让它失去帮助

单元测试也是非回归测试。如果在提交和推送之前不进行所有非回归测试,就有可能在源内容管理中引入有缺陷的代码。
你永远也做不到

单元测试必须快速执行

如果单元测试执行的时间太长,这会影响开发人员的速度,那么通常意味着它们的设计不好,或者可能不是真正的单元测试。单元测试旨在快速运行。
如果您编写的测试需要运行很长时间,因为它们需要启动服务器、加载/清理数据库中的数据、加载/卸载某些容器,等等。。。这意味着您没有编写单元测试,而是编写集成测试。这些测试不是在本地开发机器上定期自动执行的,而是在CI工具上执行的

CI必须运行所有测试

如果每个开发人员都运行测试,我们是否需要在CI服务器中运行测试 推之前

如前所述,集成测试必须由CI工具执行。
关于单元测试,在CI端保留它们的执行也不是一个好主意。
当然,开发人员必须在推送到SCM之前运行测试,但实际上,您不能保证总是这样做。
此外,即使在开发人员在推送之前执行所有测试的完美世界中,您也可能会遇到测试在开发人员机器上成功,但在CI或其他开发人员机器上失败的情况。
例如,开发人员可以在基本代码中引入一些特定于其机器的绝对路径,或者他/她也可能忘记在CI环境中使用的数据库上复制修改。
因此,运行所有测试(单元和集成测试)不一定是CI的选项

如果单元测试需要花费大量的时间来运行,我们是否期望 开发人员只挑选与变更相关的测试,或者每周一次运行一次 测试(即使在他的项目范围之外),假设我们有一个大的 maven多模块POM

当开发人员更改类、修改数据库结构或做出任何可能产生副作用的更改时,他/她将不会/无法知道整个应用程序的所有潜在副作用。
他/她永远不必太聪明地说:“我知道它可能已经被我的改变打破了,所以我将只运行这个测试”

单元测试可以确保一定程度的代码质量:不要让它失去帮助

单元测试也是非回归测试。如果在提交和推送之前不进行所有非回归测试,就有可能在源内容管理中引入有缺陷的代码。
你永远也做不到

单元测试必须快速执行

如果单元测试执行的时间太长,这会影响开发人员的速度,那么通常意味着它们的设计不好,或者可能不是真正的单元测试。单元测试旨在快速运行。
如果您编写的测试需要运行很长时间,因为它们需要启动服务器、加载/清理数据库中的数据、加载/卸载某些容器,等等。。。这意味着您没有编写单元测试,而是编写集成测试。这些测试不是为执行而设计的