欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

分类测试以减少构建时间

发布时间:2023/12/3 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 分类测试以减少构建时间 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
在继续本文的主要内容之前,让我们先进行一些定义。

单元测试

单元测试是小型的(测试一种用例或单元),在内存中运行(不与数据库,消息队列等交互),可重复且快速的测试。 对于我们的对话,让我们将其限制为开发人员编写的基于JUnit的测试用例,以检查其各自的代码。

整合测试

集成测试更大(测试一个流程或组件集成),不一定只在内存中运行(与数据库,文件系统,消息队列等交互),肯定较慢,并且不一定可重复(因为结果可能会更改)以防万一,例如在数据库中做了一些更改)。

为什么这种差异化很重要?

在敏捷编程中,其基本概念是每隔一段时间(一天在开发人员盒中多次)运行单元测试,并强制集成测试每天运行一次(在连续集成服务器上而不是在开发人员盒上)。 。 请注意,开发人员应该能够在需要时运行集成测试,这仅仅是因为它与单元测试是分开的,因此开发人员现在可以选择不在每次运行测试时都运行集成测试。

这种灵活性究竟有何帮助?

  • 开发人员的构建频率更高。 在敏捷世界中,这意味着开发人员会更频繁地运行单元测试(每天通常运行几次)。
  • 开发人员可以更快地了解错误,并减少浪费的时间来编码损坏的代码库。 这意味着节省时间和金钱。
  • 修复错误更容易,更快。 考虑到构建的频率,可以提交较少数量的“违规代码”,因此更容易将错误归零并进行修复。
  • 最后但并非最不重要的一点是,任何进行过任何专业编码的人都将证明,虽然偶尔可以休息10分钟,这比等待1小时才能更有效地杀死编码人员的创造力。 。 对士气的影响是无形的,但却是巨大的。
  • 我到底该如何减少构建时间?

    没有一个适合所有人的尺码(从来没有)。 缩短构建和发布时间的确切可执行步骤将是许多变量的因素,其中包括产品的技术堆栈(Java,DotNet,php),构建和发布技术(批处理文件,Ant,Maven)以及许多其他因素。

    对于Java,Maven和JUnit组合……

    让我们首先使用Maven创建一个简单的Java应用程序来演示这种情况。

    \ MavenCommands.bat

    ECHO OFF REM ============================= REM Set the env. variables. REM ============================= SET PATH=%PATH%;C:\ProgramFiles\apache-maven-3.0.3\bin; SET JAVA_HOME=C:\ProgramFiles\Java\jdk1.7.0REM ============================= REM Create a simple java application. REM ============================= call mvn archetype:create ^-DarchetypeGroupId=org.apache.maven.archetypes ^-DgroupId=org.academy ^-DartifactId=app001 pause

    如果运行此批处理文件,则将从为您准备好的标准Java应用程序开始。

    默认的Java应用程序不附带最新的JUnit。 您可能想要更改Maven配置以添加最新的JUnit。

    \ pom.xml

    [...]4.10[...]junitjunit${junit.version}test

    现在,继续添加一个JUnit测试类。

    /app001/src/test/java/org/academy/AppTest.java

    public class AppTest {private final static Logger logger = LoggerFactory.getLogger(AppTest.class);@Test public void smallAndFastUnitTest() {logger.debug("Quick unit test. It is not expected to interact with DB etc.");assertTrue(true); }@Test @Category(IntegrationTest.class) public void longAndSlowIntegrationTest() {logger.debug("Time consuming integration test. It is expected to interact with DB etc.");assertTrue(true); } }

    您可能会注意到有一个IntegrationTest.class标记。 您还必须创建此类。

    /app001/src/test/java/org/academy/annotation/type/IntegrationTest.java

    public interface IntegrationTest {// Just a marker interface. }

    创建标记接口并注释测试方法(或类,如果选择的话)是代码中要做的全部工作。

    现在,剩下要做的就是告诉Maven仅在集成测试阶段运行“集成测试”。 这意味着开发人员在大多数情况下可以选择仅运行单元测试(与数据库,队列等隔离​​的快速测试)。 持续集成服务器(即Hudson(或类似产品))将运行单元测试和集成测试(由于预期将与数据库等交互,因此运行速度会较慢),并且可能在一夜之间发生。

    因此,这是您的操作方式。

    /pom.xml

    org.apache.maven.pluginsmaven-surefire-plugin2.12org.apache.maven.surefiresurefire-junit472.12-XX:-UseSplitVerifierorg.academy.annotation.type.IntegrationTest

    这意味着开发人员只需使用一根衬管即可运行所有单元测试。

    mvn clean test

    这将不会运行任何注释为集成测试的测试。

    对于集成测试,请添加以下内容。

    /pom.xml

    maven-failsafe-plugin2.12org.apache.maven.surefiresurefire-junit472.12org.academy.annotation.type.IntegrationTestintegration-test**/*.class

    这意味着Hudson或开发人员(如果他选择的话)可以通过一个命令运行所有测试,单元和集成。

    mvn clean verify

    当然,如果您选择全部进行编译,运行单元测试,打包,运行集成测试和部署,那么也可以使用单行命令来完成。

    mvn clean deploy

    而已。 您已朝着更快的构建和更敏捷的工作方式迈出了一步。 快乐的编码。

    进一步阅读

    • 也可以通过Javalobby的此链接获得本文的一个版本-稍作编辑。
    • 这是另一篇文章 ,涉及使用相同技术的类似主题。

    参考:对 测试进行分类以减少构建时间。 从我们的JCG合作伙伴 Partho在Tech for Enterprise博客上获得。


    翻译自: https://www.javacodegeeks.com/2012/07/categorize-tests-to-reduce-build-time.html

    总结

    以上是生活随笔为你收集整理的分类测试以减少构建时间的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。