1.Java IDE集成开发工具: IntelliJ IDEA CE 2019
2.Apache AntåApache Mavençåºå«
3.单元测试实践
4.Javaç常ç¨å¼åå·¥å
·ï¼
Java IDE集成开发工具: IntelliJ IDEA CE 2019
IntelliJ IDEA CE 是源码一款功能强大的 Java 集成开发环境。它将源代码编入索引后,源码提供即时、源码智能的源码代码完成,以及快速的源码代码分析,确保编码效率与代码质量。源码房地产小程序源码IDE 强大的源码重构工具为开发者带来便捷的代码维护体验。
IntelliJ IDEA CE 内置了丰富且统一的源码版本控制系统界面,支持 Git、源码SVN、源码Mercurial、源码CVS、源码Perforce 和 TFS 等主流版本控制系统,源码帮助开发者高效管理代码版本。源码
构建工具方面,源码IDE 支持 Maven、Gradle、Ant、Gant、SBT、mmos源码NPM、Webpack、Grunt、Gulp 等多种构建工具。这些工具与 IDE 的无缝集成,使得自动编译、打包、运行测试、部署等操作变得更加简单高效。
在测试方面,IntelliJ IDEA CE 提供了强大的单元测试支持,包括 JUnit、TestNG、Spock、Cucumber、ScalaTest、spec2 和 Karma 等主流测试框架的测试运行器和覆盖工具。开发者可以轻松执行单元测试,提升代码质量。cssjava源码
IDE 还内置了反编译器,无需借助第三方插件,即可查看没有源代码的库。内置终端功能,让开发者无需离开 IDE 即可执行命令,进行代码调试。
数据库工具方面,IntelliJ IDEA 提供了智能编码辅助功能,支持 SQL 编辑、实时数据库连接、查询执行、数据浏览和导出,以及可视化方案管理。
应用服务器支持方面,IDE 支持 Tomcat、JBoss、WebSphere、WebLogic、Glassfish 等主流应用服务器。源码换肤开发者可以轻松部署工件到应用服务器,并在 IDE 中直接调试已部署的应用程序。
通过 Docker 工具窗口,开发者可以连接到本地运行的 Docker 机器,管理图像、容器和 Docker Compose 服务。多语言支持是 IntelliJ IDEA 的一大亮点,它不仅支持 Java,还支持 Groovy、Kotlin、Scala、JavaScript、TypeScript 和 SQL 等其他语言。IDE 提供了顶级框架的一流支持,包括 Spring、Java EE、Grails、Play、Android、avue源码GWT、Vaadin、Thymeleaf、React、AngularJS 等,帮助开发者高效完成多语言项目的开发。
IntelliJ IDEA 以其强大的功能、丰富的插件生态系统和多语言支持,成为一款功能全面、易于使用的集成开发环境,适合各类开发者在 Java 和多语言项目开发中使用。
Apache AntåApache Mavençåºå«
Apache Ant
1ãAnt æ¯ç¨åºåçï¼ä½ å¿ é¡»æç¡®çåè¯ Ant åä»ä¹ï¼ä»ä¹æ¶ååãä½ å¿ é¡»åè¯å®å»ç¼è¯ï¼ç¶åå¤å¶ï¼ç¶åå缩ã
2ãAnt 没æçå½å¨æï¼ä½ å¿ é¡»å®ä¹ç®æ åç®æ ä¹é´çä¾èµãä½ å¿ é¡»æ工为æ¯ä¸ªç®æ éä¸ä¸ä¸ªä»»å¡åºåã
Apache Maven
1ãMaven æ¥æ约å®ï¼å ä¸ºä½ éµå¾ªäºçº¦å®ï¼å®å·²ç»ç¥éä½ çæºä»£ç å¨åªéãå®æåèç æ¾å° target/classesï¼ç¶åå¨ targetçæä¸ä¸ª JAR æ件ã
2ãMaven æ¯å£°æå¼çãä½ éè¦åçåªæ¯å建ä¸ä¸ª pom.xml æ件ç¶åå°æºä»£ç æ¾å°é»è®¤çç®å½ãMaven ä¼å¸®ä½ å¤çå ¶å®çäºæ ã
3ãMaven æä¸ä¸ªçå½å¨æï¼å½ä½ è¿è¡ mvn installçæ¶å被è°ç¨ãè¿æ¡å½ä»¤åè¯ Maven æ§è¡ä¸ç³»åçæåºçæ¥éª¤ï¼ç´å°å°è¾¾ä½ æå®ççå½å¨æãéåçå½å¨ææ éä¸çä¸ä¸ªå½±åå°±æ¯ï¼Maven è¿è¡äºè®¸å¤é»è®¤çæ件ç®æ ï¼è¿äºç®æ å®æäºåç¼è¯åå建ä¸ä¸ª JAR æ件è¿æ ·çå·¥ä½ã
Maven 以æ件çå½¢å¼ä¸ºä¸äºä¸è¬ç项ç®ä»»å¡æä¾äºå ç½®çæºè½ãå¦æä½ æ³è¦ç¼åè¿è¡åå æµè¯ï¼ä½ éè¦åçåªæ¯ç¼åæµè¯ç¶åæ¾å°/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/content-zh/src/test/javaï¼æ·»å ä¸ä¸ªå¯¹äº TestNG æè JUnit çæµè¯èå´ä¾èµï¼ç¶åè¿è¡ mvn testã
å¦æä½ æ³è¦é¨ç½²ä¸ä¸ªweb åºç¨èé JAR ï¼ä½ éè¦åçæ¯æ¹åä½ ç项ç®ç±»å为 war ï¼ç¶åæä½ ææ¡£æ ¹ç®å½ç½®ä¸º /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/content-zh/src/main/webappãå½ç¶ï¼ä½ å¯ä»¥ç¨ Ant åè¿äºäºæ ï¼ä½æ¯ä½ å°éè¦ä»é¶å¼å§åè¿äºæ令ãä½¿ç¨ Ant ï¼ä½ é¦å éè¦ç¡®å® JUnit JAR æ件åºè¯¥æ¾å¨åªéï¼ç¶åä½ éè¦å建ä¸ä¸ªå å«è¿ä¸ª JUnit JAR æ件ç classpath ï¼ç¶ååè¯ Ant å®åºè¯¥ä»åªéå»æ¾æµè¯æºä»£ç ï¼ç¼åä¸ä¸ªç®æ æ¥ç¼è¯æµè¯æºä»£ç 为åèç ï¼ä½¿ç¨ JUnit æ¥æ§è¡åå æµè¯ã没æè¯¸å¦ antlibs å lvy çææ¯çæ¯æï¼å³ä½¿æäºè¿äºæ¯æææ¯ï¼ï¼Ant ç»äººæè§æ¯èªå®ä¹çç¨åºåæ建ã
项ç®ä¸ä¸ç»é«æçåæ约å®ç Maven POM ï¼ç¸å¯¹äº Ant çé ç½®æ件ï¼åªæå¾å°ç XML ã
Maven çå¦ä¸ä¸ªä¼ç¹æ¯å®ä¾é 广æ³å ¬ç¨ç Maven æ件ãææäººä½¿ç¨ Maven Surefire æ件æ¥è¿è¡åå æµè¯ï¼å¦ææ人添å äºä¸äºé对æ°çæµè¯æ¡æ¶çæ¯æï¼ä½ å¯ä»¥ä» ä» éè¿å¨ä½ 项ç®ç POM ä¸å级æ个ç¹å®æ件ççæ¬æ¥è·å¾æ°çåè½ã
ä½¿ç¨ Maven è¿æ¯ Ant çå³å®ä¸æ¯éæ¤å³å½¼çï¼Ant å¨å¤æçæ建ä¸è¿æå®çä½ç½®ãå¦æä½ ç®åçæ建å å«ä¸äºé«åº¦èªå®ä¹çè¿ç¨ï¼æè ä½ å·²ç»åäºä¸äº Ant èæ¬éè¿ä¸ç§æç¡®çæ¹æ³å®æä¸ä¸ªæç¡®çè¿ç¨ï¼èè¿ç§è¿ç¨ä¸éå Maven æ åï¼ä½ ä»ç¶å¯ä»¥å¨Maven ä¸ç¨è¿äºèæ¬ãä½ä¸ºä¸ä¸ª Maven çæ ¸å¿æä»¶ï¼ Ant è¿æ¯å¯ç¨çãèªå®ä¹çæ件å¯ä»¥ç¨ Ant æ¥å®ç°ï¼Maven 项ç®å¯ä»¥é ç½®æå¨çå½å¨æä¸è¿è¡ Ant çèæ¬ã
单元测试实践
非常有意思的一段话:
我们用得最多的基本单元测试框架是junit和testng,下面对这两个工具做个对比。
通过上面的对比可以看出,TestNG作为Java项目的单元测试框架是更有优势的,TestNG在参数化测试、依赖测试、套件测试、分组测试、并发测试等方面都比Junit4强,同时,TestNG涵盖了JUnit4的全部功能。
所以下面的案例说明都是基于TestNG来写的。
为方便对后面内容的理解,先写一个单元测试:
这是一个验证rsa加解密功能的单元测试。
TestMain是抽象出来,用于启动spring容器以及支持testng用例自动注入bean,因为启动spring容器总是很耗时的,如果我们的测试用例用不到依赖的spring bean,最好不雅启动spring容器,TestMain源码:
这就是TestMain最好放在和工程Application类所在包相同路径下的原因,比如我的示例中TestMain和BoardServerApplication都在相同包路径下:com.allawn.athletic.board.server。
检查TestNG插件是否存在
插件搜索“Coverage”
在我们的pom文件下加如下plugin配置:
idea插件自带,带搜索插件“PIT mutation testing”,但不建议用,很难调通!
本地开发环境
IDE自动创建单元测试的方法(也可手动完成):
创建后的单元测试在Maven工程的test目录下生成测试类:
注意:如果之前没有test目录,则需要手动创建一下:
然后再把目录设置为test目录。设置方法:file -> Project Structure -> Modules
运行单元测试
创建单元测试
Maven执行的相关命令:
如果单元测试不通过,出现如下:
两种方式皆可运行。
运行不通过则则会有提示
要通过maven运行单元测试,要保证pom配置没有跳过单元测试,检查设置如下:
IDEA可以直接生成覆盖率报告,导出来的覆盖率报告长这样:
点击index.html即可看报告内容:
变异测试,英文Mutation Testing,是使用变异器 (切换数学运算符,更改返回类型,删除调用等)将代码修改为不同的变异(基于变异器创建新代码),并检查单元测试是否失败。好的单元测试应该使所有突变都失败(杀死)。
主要列出testng的测试方法,junit的测试方法请另行百度。
异常测试是指在单元测试中应该要抛出什么异常是合理的,可以检测我们方法中指定跑出的异常,类似这种:
如果我们有时候不想测试某些方法的单元测试,那么我们可以指定这些具体的单元测试跳过不执行,testng和junit4都支持忽略测试,testng通过@Test(enabled=false)跳过。
指定某个单元测试方法最长执行时间,如果超时了就算失败,testng中的timeout单位是毫秒。
套件测试是指把多个单元测试组合成一个模块,然后一起运行,在套件定义中还可以通过定义组,针对相同组名的单元测试统一运行。
为方便我们模拟单元测试的传参,testng提供了@DataProvider注解,我们可以在单元测试内设置多种参数值,单元测试会依次把入参都跑一遍。被@DataProvider修饰的方法,返回值是数组形式。
依赖测试是指测试的方法是有依赖的,在执行的测试之前需要执行的另一测试。如果依赖的测试出现错误,所有的子测试都被忽略,且不会被标记为失败。
TestNG支持通过多个线程并发调用一个测试接口来实现性能测试,invocationCount表示方法调用的次数,threadPoolSize表示并发线程数量,timeOut即是每次调用最大耗时时间。
通过多线程并行调用多个测试方法,在我们套件/组测试的时候,如果使用并行测试,可以大大减少测试运行时间。
Mock的使用场景:
Mockito有比较简洁的API,简单易学,可读性强。从Mockito2开始,Mockito支持了很多新特性以及新注解(所以依赖mockito2.x以上版本的需要java8及以上jdk方可),使用很便捷,spring-boot-starter-test包默认内置mockito,鉴于维护性和语言新特性的支持,个人建议使用Mockito作为单元测试的mock工具。
在有需要的地方进行mock,否则走真实方法调用。
除了采用静态方法spy以外,还可以通过采用注解的方式:
结果示例:
除了@Spy注解需要如此设置,@Mock、@Captor、@InjectMocks等注解也需要。
对整个class进行mock
结果:
Junit5使用手册: junit.org/junit5/docs/c...
在Junit5中要使用Mockito,需要单独引入mockito-junit-jupiter依赖包,通过在单元测试类上加
@ExtendWith(MockitoExtension.class)
实现构建一个mock运行容器。
在有需要的地方进行mock,否则走真实方法调用。
除了采用静态方法spy以外,还可以通过采用注解的方式:
结果示例:
结果:
Javaç常ç¨å¼åå·¥å ·ï¼
java常ç¨çå¼åå·¥å ·ãé½è¯´å·¥æ¬²åå ¶äºå¿ å å©å ¶å¨ï¼è¦æ³å¦å¥½javaè¿é¨è¯è¨ï¼éæ©ä¸æ¬¾å¥½ç¨é¡ºæçå¼åå·¥å ·æ¯å¿ ä¸å¯å°çãå¦å¤æå¹³éå大éé¸è®¤ä¸ºé¢è¯javaå·¥ä½æ¶å¼åå·¥å ·ç使ç¨ä¹æ¯ä¸ä¸ªéè¦çèæ ¸ç¹ãè¦æ³å ¨é¢äºè§£javaå¼åå·¥å ·ï¼æ们é¦å éè¦å äºè§£ä¸ä¸javaç¨åºçå¼åè¿ç¨ï¼éè¿è¿ä¸ªè¿ç¨æ们è½å¤äºè§£å°javaå¼åé½éè¦ç¨å°é£äºå·¥å ·ã
1ãè¦æ³ç¼åç¨åºï¼éè¦ä¸ä¸ªè½ç¼åæºä»£ç çç¼è¾å·¥å ·ãä¾å¦ï¼Notepad++ï¼
2ãè¦æ³æµè¯ç¨åºï¼éè¦ä¸ä¸ªç¼è¯ãæ§è¡å·¥å ·ãä¾å¦ï¼JDKï¼
3ãè¦æ³åç¬æµè¯ä¸ä¸ªåå ï¼éè¦ä¸ä¸ªåå æµè¯å·¥å ·ãä¾å¦ï¼JUnitãTestNGï¼
4ãè¦æ³ç¼åå¼åææ¡£ï¼éè¦å¼åææ¡£ç¼è¾å·¥å ·ãä¾å¦ï¼wordãExcelãPPT;
5ãè¦æ³åæ设计ç¨åºï¼éè¦ç¨åºçåæè®¾è®¡å·¥å ·ãä¾å¦ï¼StarUMLï¼
6ãè¦æ³æ¹ä¾¿ç®¡çæºç åçæ¬å级ï¼éè¦æºç 管çåçæ¬ç»´æ¤å·¥å ·ãä¾å¦ï¼SVNï¼Gitï¼
7ãè¦æ³å¤ä¸ªå¢éåä½å¼åæè 项ç®ç¨å°å¾å¤ç第ä¸æ¹ç±»åºåJarå ãéè¦èªå¨åæå»ºå·¥å ·ãä¾å¦ï¼Mavenãgradleï¼
8ãè¦æ³å¨ä¸ä¸ªå·¥å ·ä¸ä½¿ç¨ä»¥ä¸ææåè½ï¼éè¦ç¨å°éæå¼åå·¥å ·IDEãä¾å¦ï¼Eclipseï¼
大家çå°è¿ä¹å¤å·¥å ·æ¯ä¸æ¯å¾å¤´ç¼ãåå:)æ以说javaå¼åå ¥é¨é¨æ§æç¹é«ãæ²¡å ³ç³»ãåé¢ç课ç¨æä¼ä¸ä¸ªä¸ä¸ªéæ¥ç»å¤§å®¶è¯¦ç»ä»ç»ãä¸é¢æ们å ç®åäºè§£ä¸ä¸è¿äºjavaå¼å常ç¨å·¥å ·ã
2024-11-27 12:54
2024-11-27 12:46
2024-11-27 12:29
2024-11-27 12:28
2024-11-27 12:05
2024-11-27 11:18