中小学学校网站建设,喜迎二十大作文,东莞网站推广哪里好,武昌网站建设价格多少钱为什么单元测试应与集成测试分开运行 单元测试级别的TDD相当简单#xff0c;因为单元测试中的类要么没有复杂的依赖关系#xff0c;要么使用模拟框架#xff08;例如Mockito#xff09;来模拟依赖关系。 但是#xff0c;当我们进入集成测试时#xff0c;TDDSwift变得困难… 为什么单元测试应与集成测试分开运行 单元测试级别的TDD相当简单因为单元测试中的类要么没有复杂的依赖关系要么使用模拟框架例如Mockito来模拟依赖关系。 但是当我们进入集成测试时TDDSwift变得困难。 集成测试基本上是在测试具有部分或全部依赖关系的组件而不是完全模拟它们。 示例包括跨多个层的测试读取或写入数据库或文件系统的测试需要启动Servlet容器或EJB容器的测试涉及网络通信Web服务的测试等。 集成测试往往比较脆弱和/或缓慢 。 例子 与数据库对话的测试可能不会失败不是因为代码中的逻辑错误而是因为数据库已关闭数据库的URL /用户名/密码已更改或者数据库中的数据有误。 读取或写入磁盘的测试很慢并且每次运行测试时都需要使用正确的数据或内容来重置文件或数据库。 打包和部署到容器很慢。 进行网络调用的测试失败可能不是因为代码中的逻辑错误而是因为网络资源不可用或者网络本身存在问题。 这些麻烦往往会阻止开发人员频繁运行测试。 当测试运行的次数很少时开发人员最终会在捕获错误之前编写大量代码。 因此当不经常运行测试时生产力下降因为编写大量代码后更难发现和修复错误并且存在质量问题的风险增加。 同样当运行测试很麻烦时不鼓励开发人员编写足够的测试。 因此将单元测试与集成测试分开运行是有意义的。 单元测试完全在内存中运行没有任何外部依赖关系因此即使对于大型项目它们也都应该在短短几秒钟内运行并且每次都应可靠运行因为它们仅取决于被测代码的逻辑。 因此鼓励开发人员进行每一个小的更改就可以运行所有单元测试。 使用Maven故障保护和JUnit Category进行集成测试 分离集成测试的方法不止一种。 默认情况下故障保护会选择后缀为“ IT”或“ ITCase”或以“ IT”为前缀的任何类。 但是某些测试框架也需要后缀或前缀这使得使用该方法很麻烦。 另一种方法是将集成测试放在单独的源目录中。 我选择使用JUnit Category因为我还使用了Concordion它的测试类中需要一个后缀。 本文的其余部分仅记录了我如何实施John Doble在2012年发表的名为“使用Maven和JUnit类别进行单元和集成测试”的建议 。 您可以在这里找到我的源代码 。 创建JUnit类别 创建一个JUnit类别只是简单地创建一个空接口。 真的就是这样 见下文 package com.orangeandbronze.test;public interface IntegrationTest {} 现在我可以将此“标记接口”作为类别应用于我的集成测试-在下面的示例中应用于SectionDaoTest。 import org.junit.experimental.categories.Category;
import com.orangeandbronze.test.IntegrationTest;Category(IntegrationTest.class)
public class SectionDaoTest extends DaoTest {...
} 添加Surefire和故障安全插件 现在添加Surefire和Failsafe插件。 我需要排除Surefire运行单元测试中IntegrationTest标记的所有测试并在Failsafe运行集成测试中包括IntegrationTest标记的所有测试。 另外我必须包含“ ** / *。java”否则测试将无法运行我也不知道为什么。 pluginartifactIdmaven-surefire-plugin/artifactIdversion2.18.1/versionconfigurationexcludedGroupscom.orangeandbronze.test.IntegrationTest/excludedGroups/configuration
/plugin
pluginartifactIdmaven-failsafe-plugin/artifactIdversion2.18.1/versionconfigurationincludesinclude**/*.java/include/includesgroupscom.orangeandbronze.test.IntegrationTest/groups/configurationexecutionsexecutiongoalsgoalintegration-test/goalgoalverify/goal/goals/execution/executions
/plugin 运行测试 所以现在当我运行mvn test时仅运行单元测试而当我运行mvn Integration-test或mvn verify 通常运行mvn verify时不仅会运行单元测试而且我的项目也会打包然后集成测试运行。 在一个真实的项目中每个开发人员只需进行几次更改即可运行所有的单元测试一天要进行数十次而他将不那么频繁地运行集成测试但每天至少要运行一次。 CI服务器还将在其构建期间运行单元测试和集成测试。 翻译自: https://www.javacodegeeks.com/2015/01/separating-integration-tests-from-unit-tests-using-maven-failsafe-junit-category.html