教程:测试期间的日志记录

日志记录是一种流行的解决方案,用于显示软件在运行时的运行状况。

但是,当我们使用jUnit / TestNG对应用程序进行单元测试时,日志记录会怎样?

在自动化测试执行期间,我们通常希望看到日志记录消息,因为我们的主要兴趣是测试结果。

能够在标准的自动测试过程中禁用日志记录消息将是很好的。

相反,在某些情况下,日志记录消息在测试时可能有用。 一个典型的例子是,当我们为某些遗留代码编写缺少的测试代码时,在适当覆盖测试范围之前,我们不想碰。 在这种情况下,在控制台上记录消息可以帮助我们理解代码及其工作方式。

因此,我们可以确定三个用例:

  1. 运行模式 ,在执行应用程序时:启用日志并根据应用程序的要求进行配置
  2. 测试执行模式 ,当一起执行自动测试时:应禁用日志记录消息
  3. 测试创建模式 ,当我们创建新测试时:日志消息很有用,但最好将它们放在控制台中

让我们看一个基于Maven和SLF4J的示例, SLF4J是流行的日志记录外观。

  • 完整的项目可以在这里找到。

项目pom.xml中的典型SLF4J配置如下:

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version><scope>runtime</scope></dependency>

所述slf4-api依赖是主要的SLF4J库,而第二个, slf4j-log4j12 ,所引用的可能记录的发动机(之一LOG4J ),其可工作SLF4J 下方

这是运行模式配置。 在此示例中,项目资源将包含一个LOG4J属性文件,该文件指示LOG4J应该记录什么,如何记录以及在哪里记录。

当我们使用不同的日志记录引擎(如java.util.logging(JDK)和Logback)时,也会发生相同的情况。 有关更多详细信息,请参见Slf4J手册 。

测试执行模式下,我们不想记录日志,因此我们可以简单地添加以下范围测试依赖项

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>${slf4j.version}</version><scope>test</scope></dependency>

NOP记录器(slf4j-nop)只是丢弃所有记录。

重要提示pom.xml的依赖关系顺序很重要。 将slf4j-nop依赖项放在slf4-api依赖项之后,这样就可以在测试期间使用它,即使该依赖项中还有另一个日志记录引擎。

pom.xml有多个日志记录引擎依赖项时,无论如何SLF4J都会显示如下消息:

SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:.m2/repository/org/slf4j/slf4j-nop/1.7.12/slf4j-nop-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:.m2/repository/org/slf4j/slf4j-log4j12/1.7.12/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory]

总而言之,下面是一个完整的配置示例:

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>${slf4j.version}</version><scope>test</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version><scope>runtime</scope></dependency>

同样,应该调整最后一个依赖项以匹配所需的日志记录引擎。

如前所述,创建新测试时日志记录很有用。 在这种情况下( 测试创建模式 ),我们可以用slf4j-simple依赖项临时替换slf4j-nop ,这将启用SLF4J Simple logger 。

现在,在执行测试期间,日志消息将作为System.err消息显示在控制台窗口中。 不需要配置文件。

默认情况下,简单记录器不会记录DEBUG消息。 标准日志记录级别为INFO。

您可以使用此处记录的系统变量来自定义Simple logger行为。

定义简单记录器配置的明智方法是使用[Surefire插件配置部分]( http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html ):

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version><configuration><systemPropertyVariables><org.slf4j.simpleLogger.defaultLogLevel>DEBUG</org.slf4j.simpleLogger.defaultLogLevel><org.slf4j.simpleLogger.showDateTime>true</org.slf4j.simpleLogger.showDateTime></systemPropertyVariables></configuration></plugin></plugins></build>

systemPropertyVariables部分中,我们可以使用Simple logger变量名称创建标签。 在上面的示例中,启用了DEBUG和时间戳记录。

翻译自: https://www.javacodegeeks.com/2015/11/tutorial-logging-tests.html

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

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

相关文章

VM虚拟机ping不通局域网其他主机的解决办法

1 我的笔记本的无线网卡是自动获取IP&#xff0c;并且是通过无线网卡上网。 2 我的有线网卡是通过自己设定IP跟局域网的其他机器连通。当前设定的IP为172.16.17.2 3我需要连接的局域网另一个主机为172.16.17.8&#xff0c;现在测试主机跟这个局域网的另一台主机是可以ping通的。…

moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–客户端

moxy json介绍最近&#xff0c;我发布了如何利用EclipseLink JAXB&#xff08;MOXy&#xff09;的JSON绑定来创建RESTful服务。 在本文中&#xff0c;我将演示在客户端利用MOXy的JSON绑定有多么容易。 MOXy作为您的JAX-RS JSON提供程序–服务器端 MOXy作为您的JAX-RS JSON提供…

linux命令画圣诞树图片,以 Linux 的方式庆祝圣诞节

原标题&#xff1a;以 Linux 的方式庆祝圣诞节当前正是假日季&#xff0c;很多人可能已经在庆祝圣诞节了。祝你圣诞快乐&#xff0c;新年快乐。为了延续节日氛围&#xff0c;我将向你展示一些非常棒的圣诞主题的 Linux 壁纸。在呈现这些壁纸之前&#xff0c;先来看一棵 Linux 终…

Mockito教程:使用Mockito进行测试和模拟

课程大纲 Mockito是根据MIT许可证发布的Java开源测试框架&#xff0c;该框架允许在自动化单元测试中创建测试双重对象&#xff08;模拟对象&#xff09;&#xff0c;以实现测试驱动开发&#xff08;TDD&#xff09;或行为驱动开发&#xff08;BDD&#xff09;的目的。 如官方文…

LINQ 学习路程 -- 查询语法 LINQ Query Syntax

1.查询语法 Query Syntax: from <range variable> in <IEnumerable<T> or IQueryable<T> Collection><Standard Query Operators> <lambda expression><select or groupBy operator> <result formation> // string collectio…

linux 权限提示信息,命令行快速提示:权限进阶 | Linux 中国

原标题&#xff1a;命令行快速提示&#xff1a;权限进阶 | Linux 中国本部分介绍使用权限管理文件访问和共享的其他方法。-- Paul W. Frields前一篇文章。本部分介绍使用权限管理文件访问和共享的其他方法。它建立在前一篇文章中的知识和示例的基础上&#xff0c;所以如果你还没…

nginx正确服务react-router应用

如今React应用普遍使用react-router作为路由管理&#xff0c;在开发端webpack自带的express服务器下运行和测试表现均正常&#xff0c;部署到线上的nginx服务器后&#xff0c;还需要对该应用在nginx的配置里作相应调整&#xff0c;否则浏览器将不能正常使用该应用&#xff0c;表…

linux多进程 段错误,关于段错误

一个月的时间&#xff0c;就为了解决一个问题&#xff0c;段错误运行环境&#xff1a;arm-linux模块&#xff1a;XML&#xff0c;为多线程&#xff0c;多socket的网络通信协议程序现象&#xff1a;XML在运行一段时间以后&#xff0c;出现段错误&#xff0c;运行的时间和出现问题…

解决checkbox与对应文字不对齐的问题

最近公司比较忙&#xff0c;所以一直在赶项目&#xff0c;很久没有更新博客了。 刚才在工作中又遇到了一个问题&#xff0c;下面我来分享一下吧(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e; 问题所在我写了一个input&#xff0c;他的类型是checkbox&…

scala akka_使用Scala,Play和Akka连接到RabbitMQ(AMQP)

scala akka在本文中&#xff0c;我们将研究如何从Scala连接到RabbitMQ&#xff0c;以便可以从应用程序中支持AMQP协议。 在此示例中&#xff0c;我将使用Play Framework 2.0作为容器&#xff08;有关更多信息&#xff0c;请参阅我在该主题上的其他文章 &#xff09;在其中运行应…

linux中服务器之间的跳转,linux之***服务器间ip隧道跳转多ip路由走向分流(系真实案例)...

本文系统Centos6.0&#xff1b;这里的***服务以pptpd为例&#xff1b;其中底层涉及到pptpdfreeradiusmysql认证&#xff1b;本文系真实案例&#xff1b;leader需求大多是这样的&#xff0c;节约成本还要达到所需要的效果&#xff1b;没办法&#xff0c;总的做个效果出来&#x…

POJ2503 Babelfish map或者hash_map

POJ2503 这是一道水题&#xff0c;用Map轻松AC。 不过&#xff0c;可以拿来测一下字符串散列&#xff0c; 毕竟&#xff0c;很多情况下map无法解决的映射问题需要用到字符串散列。 自己生成一个质数&#xff0c; 随便搞一下。 #include<iostream> #include<cstdio>…

使用JBoss EAP 7的HTTP / 2

就在几天前&#xff0c;新的JBoss EAP 7 ALPHA版本已经发布。 而且我已经写过关于如何开始使用它的博客。 一个非常有趣的部分是HTTP / 2支持&#xff0c;它已作为技术预览添加。 它由新的Web服务器Untertow提供。 HTTP / 2通过压缩头并在同一TCP连接上多路复用多个流来减少延迟…

linux树莓派 ssh密码,树莓派之SSH连接经验

打开SSH服务执行raspi-configsudo raspi-config选择InterfacingOptions选项&#xff0c;回车选择SSH&#xff0c;回车Windows下客户端推荐使用putty这个免费开源的SSH客户端。下载地址在红框处填入树莓派的IP地址&#xff0c;点击右下角的Open即可。不过&#xff0c;putty的默认…

linux嵌入式面试题合集,嵌入式linux面试题解析(一)——ARM部分二

嵌入式linux面试题解析(一)——ARM部分二1、描述一下嵌入式基于ROM的运行方式基于RAM的运行方式有什么区别。基于RAM的运行方式&#xff1a;需要把硬盘和其他介质的代码先加载到ram中&#xff0c;加载过程中一般有重定位的操作&#xff1b;基于ROM&#xff1a;没有上面的操作。…

Unity应用架构设计(1)—— MVVM 模式的设计和实施(Part 2)

MVVM回顾 经过上一篇文章的介绍&#xff0c;相信你对MVVM的设计思想有所了解。MVVM的核心思想就是解耦&#xff0c;View与ViewModel应该感受不到彼此的存在。 View只关心怎样渲染&#xff0c;而ViewModel只关心怎么处理逻辑&#xff0c;整个架构由数据进行驱动。不仅View与View…

apache camel_REST端点,可使用Apache Camel进行集成

apache camelREST是一种用于组织资源的体系结构样式&#xff0c;当应用于基于HTTP的服务时&#xff0c;REST可以构建无状态&#xff0c;分离的可伸缩服务。 HTTP方法&#xff0c;HTTP标头和mime类型都允许开发人员实现REST样式。 诸如Jersey和Fuse Services Framework&#xff…

Linux读取SSD的smart信息,使用smartmontools查看SSD的“秘密”信息

仍然担心看不到sm841中的温度吗&#xff1f;您是否仍对Toshiba Q pro看不见写入量和使用寿命值感到不安&#xff1f;为了查看M4 / 00的写入量&#xff0c;您是否仍在使用C300固件升级程序重新启动到纯DOS并麻烦地运行命令&#xff1f;想知道在协议级别上SSD出了什么问题吗&…

Linux查看系统信息的一些命令及查看已安装软件包的命令

系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所…

5条Java记录规则

日志记录是一个关键因素&#xff0c;在软件开发过程中应始终将其考虑在内。 当生产中发生不良情况时&#xff0c;日志文件通常是我们进行故障分析的起点。 而且&#xff0c;通常&#xff0c;它们是我们掌握的唯一信息&#xff0c;可以了解发生了什么以及问题的根本原因。 正确…