maven使用junit3_JUnit,Logback,带有Maven 3的Maven

maven使用junit3

在本系列中,我们已经学习了建立基本的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()进行日志记录。

如果没有适当的日志记录,您可能会走很长一段路。 但是,我花了太多周末和晚上来追踪生产问题,而企业却不知所措,希望有某种方法可以知道应用程序中发生的事情,而不必一味猜测。 如今,有了成熟的api(如slf4j)和稳定的实现(如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框架运行单元测试 @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

maven使用junit3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode(90):子集 II

Medium&#xff01; 题目描述&#xff1a; 给定一个可能包含重复元素的整数数组 nums&#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。 说明&#xff1a;解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [[2],[1],[1,2,2],[2,2],[1,2],[] ] 解题思路&…

MFC程序在其他机器运行

为了保证MFC程序能够在没有安装VS的机器上运行&#xff0c;可以采用如下方法。1. 单个的小程序&#xff0c;可以静态编译MFC&#xff0c;但不适用于有很多dll的工程。2. 拷贝VS安装目录Microsoft Visual Studio 11.0\VC\redist\x86\Microsoft.VC110.MFC下的4个文件和Microsoft …

ACM搜索题目总结

ACM搜索题目总结 格式说明&#xff1a;题目名后面列出个人此题的大致难度&#xff08;对菜鸟而言&#xff09; POJ 1069 -The Bermuda Triangle(难) http://acm.pku.edu.cn/JudgeOnline/problem?id1069 题意&#xff1a;用给定三角型填充六边形 解法&#xff1a;此题的思想上精…

JPA中按身份引用

在上一篇文章中 &#xff0c;我提到我选择通过其主键而不是类型来引用其他聚合。 在处理大型或复杂域模型时&#xff0c;我通常使用这种方法&#xff08;也称为断开域模型&#xff09;。 在这篇文章中&#xff0c;让我尝试进一步解释如何在JPA中完成它。 请注意&#xff0c;生成…

在idea下开发出现404错误

用idea开发时&#xff0c;我们一般要设置project strucure里的Modules-Sources,里面对应的有Sources,tests,Resources,Test Resources&#xff0c; Excluded。 同时也可以在maven的pom里面build标签里设置。 <resource><directory>src/main/webapp</directory&g…

MFC利用控制台输出调试信息的方法

VS2010中只要输入以下信息即可&#xff1a;editbin /SUBSYSTEM:CONSOLE $(OUTDIR)$(TargetName).exeVC6.0稍微复杂&#xff1a;打开菜单“Project”-“Setting”&#xff08;或者Alt-F7&#xff09;&#xff0c;打开选项卡“Post-builder step”&#xff08;Post-build步骤&…

一念成佛,一念成魔

一念成佛&#xff0c;一念成魔 前几天&#xff0c;因我与寝友的一次错误导致电脑系统崩溃&#xff0c;连开机都开不了了。可我发现我并不是很生气&#xff0c;只是用玩笑话调侃了他一下。后来想想&#xff0c;要是放在以前&#xff0c;我一定会大发脾气&#xff0c;几天都不去理…

Jquery操作基本筛选过滤器

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>层级选择器</title><link rel"stylesheet" href"../../css/style.css" type"text/css"/><script type"text/javascript…

nodejs微信小程序+python+PHP计算机网络在线考试系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Visual C++利用互斥量同步线程实现文件读取进度条

忘了原文的位置了。 一、前言 文件读取进度条的实现可以有很多种方法,常用的是在读取文件的过程中隔一定时间向对话框发送消息以控制进度条的位置,但是这种方法很难确定隔多少时问发送一个消息,因为文件的大小是不确定的,时间间隔长了可能文件已经读取完了还没有发送消…

组件模块化使用

// 使用$attr可以直接在父元素上拿数据让子元素使用或者是孙元素使用 <template><div>props:{{name}},{{age}} 或者 {{$props[name]}},{{$props[age]}} <br>attrs: {{$attrs[gender]}} 在$attrs里面只会有props没有注册的属性</div> </template>…

jboss与nginx_JBoss BRMS与JasperReports进行报告

jboss与nginx介绍 Jasperreports是可免费下载的库&#xff0c;可用于为Java EE应用程序生成丰富的报告。 本指南还提供了使用Jasper iReport设计器生成报告模板的步骤。 软件需求 JBoss BRMS 5.3&#xff08;从客户门户网站http://access.redhat.com &#xff09; JasperRep…

VS2010发布、打包安装程序超全超详细

找不到原文链接 1、 在vs2010 选择“新建项目”“其他项目类型”“ Visual StudioInstaller “安装项目”&#xff1a; 命名为&#xff1a;Setup1 。 这是在VS2010中将有三个文件夹&#xff0c; 1.“应用程序文件夹”表示要安装的应用程序需要添加的文件&#xff1b; 2.“…

IntelliJ IDEA2017 激活方法 最新的

今天打开电脑&#xff0c;非常不幸&#xff0c;idea出问题了&#xff01;&#xff01;&#xff01;大部分人以前应该都是用的以下方法&#xff1a;1. 到网站 http://idea.lanyus.com/ 获取注册码2.填入下面的license server:http://intellij.mandroid.cn/   http://idea.imsx…

介绍HawkFX

如前所述&#xff0c; 我开始玩JRubyFX 。 对我来说&#xff0c;学习一些新的最佳方法可以解决用例&#xff0c;因此我开始为Hawkular创建库存浏览器。 为什么选择JRubyFX&#xff1f; 让我们首先从“什么是JRubyFX”开始&#xff1f; JRubyFX是通过JRuby引入Ruby世界的JavaFX…

C++ Unicode和ANSII转换

构造字符串和转换字符串是不一样的&#xff0c;构造字符串时往往是添加标记&#xff0c;这个过程其实是告诉编译器应该怎么在内存中存储&#xff1b;一旦构造好&#xff0c;对于内存中的一块地址&#xff0c;这些标记符就没用了&#xff0c;这个时候就得使用转换函数转换了。对…

创建win32 dll

新建项目->win32项目&#xff08;不是win32控制台&#xff09;->下一步中选择dll&#xff08;如果想生成lib&#xff0c;勾选导出符号&#xff09;。此时编译会生成对应的dll文件&#xff0c;但没有lib&#xff0c;只有有导出符号的时候才会生成lib文件。导出符号可以使用…

蓝桥杯 有几个星期日的问题.

1949年的国庆节&#xff08;10月1日&#xff09;是星期六。 今年&#xff08;2012&#xff09;的国庆节是星期一。那么&#xff0c;从建国到现在&#xff0c;有几次国庆节正好是星期日呢&#xff1f;只要答案&#xff0c;不限手段&#xff01;可以用windows日历&#xff0c;win…

storm问题汇总

1.删除了本地topology导致无法启动nimbus 删除storm的自定义的库中的数据 删除zookeeper中配置的dataDir中的数据 重启服务即可 转载于:https://www.cnblogs.com/ives/p/9165850.html

带有API网关的AWS Lambda

在上一篇文章中&#xff0c;我向您展示了如何创建和部署AWS Lambda。 我们将继续这项工作&#xff0c;并只考虑更新该lambda的代码。 我们还将使用AWS API Gateway将REST端点添加到AWS Lambda。 因此&#xff0c;在继续之前……&#xff08;如果尚未使用&#xff09;&#xff…