在本系列中,我们已经学习了建立基本的Spring MVC应用程序并学习了如何在Spring MVC中处理表单 。 现在该讨论更多涉及的主题了。 但是,在我们涉足更深的领域之前,让我们先进行一些基础设置。

单元测试

我不是TDD传播者。 我在那里说了。 我从来没有能够编写任何软件的地方,对于每段代码,我都先编写了一个测试,然后编写了代码。 如果您已经这样做并且被编码所雇用,请告诉我。 我很想了解你。 说真的

我对TDD的意见分歧到此为止。 除了在代码之前编写测试(某种程度上我根本无法动动脑筋)之外,我还是单元测试的大力支持者。 我坚信使用JUnit测试所有功能(公共但非getter设置器,方法)。 我非常喜欢使用cobertura报告代码覆盖率。 我是maven的忠实拥护者,它使我只需一个命令就可以将它们整合到一个漂亮HTML报告中。

我将在本系列中使用JUnit 4。 让我们添加依赖项。

档案:\ pom.xml

<properties>                                                     <junit.version>4.10</junit.version>
</properties>  <!-- Unit testing framework. -->
<dependency>                           <groupId>junit</groupId>           <artifactId>junit</artifactId>     <version>${junit.version}</version><scope>test</scope>
</dependency>

让我们添加一个哑类来演示测试。

文件:/src/main/java/org/academy/HelloWorld.java

package org.academy;public class HelloWorld {private String message = 'Hello world. Default setting.'; public String greet(){return message; }public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}

最后是JUnit对其进行测试。

文件:src / test / java / org / academy / HelloWorldTest.java

package org.academy;import static org.junit.Assert.*;import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class HelloWorldTest {@AutowiredHelloWorld helloWorld;private final static Logger logger = LoggerFactory.getLogger(HelloWorldTest.class);@Testpublic void test() {    logger.debug(helloWorld.greet());assertEquals(helloWorld.greet(), 'Hello world, from Spring.');}
}

您可能已经注意到,单元测试中的helloWorld从未在代码中初始化。 这就是Spring的IoC魅力 。 为了使这项工作有效,我们使用了@ RunWith,@ ContextConfiguration和@Autowired。 而且我还为Spring提供了足够的信息,使其能够创建HelloWorld实例,然后将其注入到HelloWorldTest.helloWorld中。 另外,assertEquals正在检查与HelloWorld类中实际硬编码的消息完全不同的消息。 这是在下面提到的xml文件中完成的。 请注意在Maven结构中文件的位置。

文件:/src/test/resources/org/academy/HelloWorldTest-context.xml

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:p='http://www.springframework.org/schema/p'xmlns:context='http://www.springframework.org/schema/context'xsi:schemaLocation='http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd'><bean id='helloWorld' class='org.academy.HelloWorld'><property name='message' value='Hello world, from Spring.' /></bean>
</beans>

我可以通过多种方式将此配置文件提供给单元测试。 @RunWith(SpringJUnit4ClassRunner.class)是很不错的添加,但不是必需的 。 我在这里提供的只是在大多数情况下都可以使用的香草方法,但我鼓励观众进行试验。

单元测试范围/代码范围。

对于个人/开发人员和技术主管而言,我认为关于自动/半自动/简便的代码覆盖率报告的重要性还没有足够的评论。 除非您虔诚地实践TDD(以我之前从未提到过的方式进行过实践),否则即使是单个开发人员也绝对不可能知道单元测试是否涵盖了代码的所有逻辑分支。 我什至不打算谈论团队/组织的技术负责人如何确保其产品经过充分的单元测试。 我个人认为,任何未经足够的单元测试和报告测试范围的软件产品,都是无法接受的风险。 期。 诚然有一点硬性立场,但事实就是如此。

我对强硬立场的坚定信念来自这样一个事实,即报告测试覆盖率是如此容易。 在此示例中,我将使用cobertura。 您需要将cobertua添加到Maven pom。

档案:pom.xml

<!-- Reporting -->
<plugin>                                                              <groupId>org.apache.maven.plugins</groupId>                       <artifactId>maven-site-plugin</artifactId>                        <version>3.0</version>                                            <configuration>                                                   <reportPlugins>                                               <!-- Reporting on success / failure of unit tests -->     <plugin>                                                  <groupId>org.apache.maven.plugins</groupId>           <artifactId>maven-surefire-report-plugin</artifactId> <version>2.6</version>                                </plugin>                                                 <!-- Reporting on code coverage by unit tests. -->        <plugin>                                                  <groupId>org.codehaus.mojo</groupId>                  <artifactId>cobertura-maven-plugin</artifactId>       <version>2.5.1</version>                              <configuration>                                       <formats>                                         <format>xml</format>                          <format>html</format>                         </formats>                                        </configuration>                                      </plugin>                                                 </reportPlugins>                                              </configuration>

完成此操作并添加JUnit并添加实际的JUnit测试后,您只需要运行

mvn -e clean install site

创建一个漂亮的基于HTML的代码覆盖率报告。 此报告将允许您单击被测试的源代码,并为单元测试的代码提供漂亮的绿色补丁,而对于那些通过裂缝的代码则为您提供红色的补丁。

记录中

Log4j很好, Logback更好 。 只是不要使用System.out.println()进行日志记录。

如果没有适当的日志记录,您可能会走很长一段路。 但是,我花了太多周末和晚上来追踪生产问题,而企业却深呼吸,希望有某种方法可以知道应用程序中发生的事情,而不用一味猜测。 如今,借助slf4j之类的成熟api和诸如logback之类的稳定实现,开发人员只需为每个类添加一条额外的行即可利用企业级日志记录基础架构。 从任何项目开始就不使用正确的日志记录只是没有意义的。

添加slf4j并重新登录到Maven依赖项。

文件:\ pom.xml。

<!-- Logging -->
<dependency>                                <groupId>ch.qos.logback</groupId>       <artifactId>logback-classic</artifactId><version>${logback.version}</version>
</dependency>

确保排除了Spring的默认日志记录,即公共日志。 如果您想知道logback是否真的那么好,我声称这就是为什么Spring不选择它作为开始。 在我的辩护中,这是Spring官方博客上的链接 ,他们说:“如果我们可以倒计时并现在作为一个新项目启动Spring,它将使用不同的日志记录依赖性。 首选的可能是Java的简单日志记录外观(SLF4J),……”

文件:\ pom.xml。

<!-- Support for testing Spring applications with tooTestNG This artifact is generally always defined the integration testing framework and unit testin
<dependency>                                         <groupId>org.springframework</groupId>           <artifactId>spring-test</artifactId>             <version>${org.springframework.version}</version><scope>test</scope>                              <exclusions>                                     <exclusion>                                  <groupId>commons-logging</groupId>       <artifactId>commons-logging</artifactId> </exclusion>                                 </exclusions>
</dependency>

提供用于注销的配置。

文件:/src/main/resources/logback.xml

<?xml version='1.0' encoding='UTF-8'?>
<configuration><appender name='CONSOLE' class='ch.qos.logback.core.ConsoleAppender'><encoder><pattern>%d %5p | %t | %-55logger{55} | %m %n</pattern></encoder></appender><logger name='org.springframework'><level value='INFO' /></logger><root><level value='DEBUG' /><appender-ref ref='CONSOLE' /></root>
</configuration>

最后,在每个需要记录的类(应该是所有类)的开始处添加一个魔术贴。

文件:src / test / java / org / academy / HelloWorldTest.java

[...]
private final static Logger logger = LoggerFactory  .getLogger(HelloWorldTest.class);
[...]
logger.debug(helloWorld.greet());
[...]

你们都在那里准备好了。 现在是时候深入春天了。

快乐的编码。

想了解更多吗?

这里是本系列早期文章的链接。
Hello World with Spring 3 MVC
使用Spring 3 MVC处理表单

而且,当然强烈推荐
Spring 3使用JUnit 4进行测试。
使用Spring Framework运行单元测试 @RunWith JUnit4以及SpringJUnit4ClassRunner和参数化 Junit和Spring的问题。

在Tech for Enterprise博客上,来自我们的JCG合作伙伴 Partho的 参考资料: JUnit,Logback,Maven和Spring 3 。

翻译自: https://www.javacodegeeks.com/2012/07/junit-logback-maven-with-spring-3.html

JUnit,Logback,带有Maven 3的Maven相关推荐

  1. 常用Maven收集以及Maven技巧

    1.完整的Maven的pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmln ...

  2. Maven学习(一) - Maven基础

    2019独角兽企业重金招聘Python工程师标准>>> Maven作为Java语言的构建和依赖管理工具,已经被广泛使用.但对于maven的pom.xml的配置以及插件的使用,大部分人 ...

  3. 4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念

     1 maven概念模型 2 maven的生命周期,项目构建过程 Maven生命周期就是为了对所有的构建过程进行抽象和统一 包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤 Mave ...

  4. Maven基础:Maven环境搭建及基本使用(1)

    1. Maven环境搭建 1.1 Maven简介 1.2 Maven下载及环境设置 Maven下载地址:http://maven.apache.org/download.cgi 当前下载版本:apac ...

  5. Maven学习(1) - Maven入门

    home index:http://maven.apache.org/ download:http://maven.apache.org/download.cgi install: http://ma ...

  6. java day48【 Maven 介绍 、 Maven 的使用 、Maven 常用命令 、 maven 工程运行调试 、总结】...

    第1章 Maven 介绍 1.1 什么是 Maven 1.1.1 什么是 Maven Maven 的正确发音是[ˈmevən],而不是"马瘟"以及其他什么瘟.Maven 在美国是一 ...

  7. maven学习:maven 的入门

    2.maven 的入门 到目前为止,我们已经大概了解并安装好了Maven,现在,我们开始创建一个最简单的Hello World项目. 2.1 在Idea创建maven项目 创建一个Maven项目也十分 ...

  8. 2019尚硅谷大数据Maven篇一 Maven安装和概念

    2019尚硅谷大数据Maven篇一安装和概念 tags: golang 2019尚硅谷 categories: java Maven 安装 依赖 概念 文章目录 2019尚硅谷大数据Maven篇一安装 ...

  9. 【Maven教程】-Maven基础篇(概念、思考、安装)

    Maven教程-Maven基础篇之Maven实战入门2020年 第一章 Maven简介 1.1 软件是一个工程 1.2 传统项目开发存在的问题 1.3 Maven概述 1.4 Maven核心概念 1. ...

  10. 配置maven仓库 手写maven项目 配置maven打包

    配置maven仓库 手写maven项目 配置maven打包 操作录像 maven环境变量 maven仓库 maven标准pom.xml maven打包插件 附录:FreeBSD默认环境变量 操作录像 ...

最新文章

  1. dede织梦调用顶级二级栏目及下三级栏目方法(数据库实现)
  2. 关于html5和css3的新特性
  3. Oracle 数据库版本和位数sql语句查看方法
  4. Sublime Text 3安装Package Control快速建立html5和xhtml文档
  5. Visual C++——《可视化编程技术》实验报告——绘图与文本操作
  6. mongodb 查多个不等于_高可用架构之商城的mongodb设计分析
  7. 查询数据库前十条数据_入门数据分析的一些建议
  8. [Scrum] 12.22
  9. MarkerOpter marker操作类
  10. mysql在学号列创建主码约束_MySQL 数据完整性
  11. 查看一个数是不是2的n次方
  12. transformer李宏毅讲解视频及decoder讲解
  13. 百度编辑器ueditor中的表格添加边框和颜色
  14. Linux学习(1)阿里云服务器及配置、使用xshell远程连接
  15. 程序员文档写作能力(三)-如何处理好微信、邮件、开会时的话术
  16. 毛伟:重塑网络根基——国际形势使然,技术升级必然
  17. 给猜字游戏增加难度设置
  18. python中的aliasing
  19. uniapp小程序更换头像
  20. 【两所985大学】计算机/软件学院被合并到信息学部/院!

热门文章

  1. java转换文本文件到xlsx(自制缓冲区,无需先验文件行数)
  2. lambda表达式语法_使用类似Lambda的语法作为Java中的表达式进行切换
  3. 光流法测试代码_高效的企业测试-工作流和代码质量(4/6)
  4. 多云平台_多云系统的授权
  5. java登录界面命令_Java命令行界面(第25部分):JCommando
  6. junit5 动态测试_JUnit 5 –动态测试
  7. 侦听127.0.01_Spring 4.2中由注释驱动的事件侦听器
  8. ssm 返回json配置_摆脱困境:将运行时配置作为JSON返回
  9. 愚弄dnn_不要被泛型和向后兼容性所愚弄。 使用泛型类型
  10. 内存泄露严重吗_内存泄漏–测量频率和严重性