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

记录日志的测试软件

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

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

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

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

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

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

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

让我们看一个基于Maven和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-nop 临时替换为slf4j-simple依赖关系,从而启用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/336652.shtml

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

相关文章

选择排序 自带时间复杂度分析

从当前未排序的整数中找到最小的整数&#xff0c;将它放在已排序的整数列表的最后。 #include<iostream> #include<time.h> using namespace std;void Sort(int List[], int n);int main() {int a[10000];int k, j;// 设置种子srand((unsigned)time(NULL));/* 生成…

oracle11g支持xp吗_拔掉U盘前一定需要安全弹出吗?

相信每一个使用过U盘的人&#xff0c;都经历过不安全弹出USB设备就直接拔掉&#xff0c;然后被电脑无情提示没有正确弹出USB设备的状况。拔掉U盘前点击安全弹出&#xff0c;已经成了一种默认的操作。那么&#xff0c;问题来了&#xff0c;拔掉U盘前真的需要安全弹出吗&#xff…

yili邮箱服务器配置,手把手教 个人SMTP服务器的配置 -电脑资料

导读&#xff1a;&#xff0c;因此我们要手工添加&#xff0c;管理员身份登录Windows Server 2003 系统。依次进入“控制面板→添加或删除程序→添加/删除Windows组件”&#xff0c;在弹出的“Windows组件向导”对话框中选中“电子邮件服务”选项&#xff0c;点击“详细信息”按…

java中使用kotlin_在Kotlin中使用libGDX

java中使用kotlin最近&#xff0c;我一直在阅读有关不同语言的信息&#xff0c;以及它们可以为已经拥挤的软件开发人员带来什么&#xff0c;并且一种语言对我来说很突出&#xff1a;Kotlin。 &#xff08; https://kotlinlang.org/ &#xff09; 这是一种相对较新的语言&#…

单链表的各种操作

#include<iostream> #define _CRT_SECURE_NO_WARNINGS using namespace std; typedef int DATA;struct SNode //定义节点 {DATA data;SNode* pNext; }; class CList //创建一个链表类 {SNode* m_hHead; //链表初始化char m_name[20];public:CL…

linux双显卡配置_Linux系统怎么配置双显卡?

感谢脚本之家网友鸢一雨音 的投稿众所周知&#xff0c;自从高性能独立图形处理器出现之后&#xff0c;很多便携式计算机就会采取一种双显卡的设计&#xff1a;节能的核心图形处理器用于渲染常规的桌面环境&#xff0c;而高性能的独立图形处理器则负责渲染高需求的应用程序。这种…

同时防服务器维修,加强服务器日常运维,避免宕机灾难发生

原标题&#xff1a;加强服务器日常运维&#xff0c;避免宕机灾难发生服务器作为我们日常网络的支撑&#xff0c;可以说是24小时的全天候运转。在这种无休止的“加班”的状态下&#xff0c;服务器必然容易出问题&#xff0c;一旦发生服务器宕机就会造成整个网络的瘫痪&#xff0…

java动态代理_Java动态代理

java动态代理代理是一种设计模式。 当我们想添加或修改现有类的某些功能时&#xff0c;我们创建并使用代理对象。 使用代理对象而不是原始对象。 通常&#xff0c;代理对象具有与原始对象相同的方法&#xff0c;并且在Java代理类中&#xff0c;通常会extend原始类。 代理具有原…

建立能持续处理请求的Server端改造

#include<iostream> #include<Windows.h> using namespace std;int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOCKET _sock ::socket(AF_INET, SOCK_STREAM,…

basemap安装_【我是解决安装问题系列_1】Mac python basemap安装

「2020/3/21更新」 附basemap网盘下载地址⏬Python需要跳过的安装的坑太太太太多了!!!!!最近看《利用python进行数据分析》这本书&#xff0c;到可视化的部分&#xff0c;看着最后的例子地图挺酷炫的&#xff0c;跟着敲代码的过程中&#xff0c;发现有时候不是你不会写&#xf…

nfs服务器远程访问,NFS远程共享存储

原标题&#xff1a;NFS远程共享存储构建储NFS远程共享存因为NFS有很多功能&#xff0c;不同的功能需要使用不同的端口。因此NFS无法固定端口。而RPC会记录NFS端口的信息&#xff0c;这样就能够通过RPC实现服务端和客户端的RPC来沟通端口信息。那RPC和NFS之间又是如何之间相互通…

chameleon 算法_使用Chameleon,Shrinkwrap,Drone / Graphene与Arquillian进行Java EE集成测试...

chameleon 算法从我以前的帖子继续在这里 &#xff0c;我想我已经了解了Java EE和也的Arquillian&#xff0c;并测试了一些新的&#xff08;和令人兴奋的&#xff09;事&#xff0c;我想与大家分享。 但是&#xff0c;在开始之前&#xff0c;我想首先请您注意以下几点&#xf…

建立能持续处理请求的Client端改造

#include<iostream> #include<Windows.h> using namespace std;int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOCKET _sock ::socket(AF_INET, SOCK_STREAM,…

comparator 字符串比较大小_Java8 - 使用 Comparator.comparing 进行比较排序

使用外部比较器Comparator进行排序 当我们需要对集合的元素进行排序的时候,可以使用java.util.Comparator 创建一个比较器来进行排序。Comparator接口同样也是一个函数式接口,我们可以把使用lambda表达式。如下示例, package com.common; import java.util.*; import java.u…

ntp服务器查看终端,使用命令行界面使用NTP服务器在Windows中同步时间 | MOS86

即使使用简单的3V锂电池(CR2032)关闭电脑&#xff0c;每台台式电脑也能保持正确的时间。但这不是一个可充电电池&#xff0c;所以一年左右就停止工作了。您可以轻松地替换此单元格&#xff0c;但更换单元后&#xff0c;必须使用NTP服务器更新时间&#xff0c;以便Windows PC保持…

java 中的指针_Java中的指针

java 中的指针Java中有指针吗&#xff1f; 简短的答案是“不&#xff0c;没有”&#xff0c;这对于许多开发人员来说似乎是显而易见的。 但是&#xff0c;为什么对其他人却不那么明显呢&#xff1f; http://stackoverflow.com/questions/1750106/how-can-i-use-pointers-in-ja…

发送结构化网络数据Server端

#include<iostream> #include<Windows.h> using namespace std;struct DataPack {int age;char name[32];};int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOC…

concat合并的数组会有顺序么_JS 数组操作 记录 笔记

Array数组的方法Mutator方法————"突变方法"会改变数组自身的值&#xff1b;Accessor方法————"访问方法"不会改变数组自身的值&#xff1b;Iteration方法————"遍历的方法" Establish方法————"创建新方法"Mutator方法(会…

工厂模式理解_工厂模式

工厂模式理解工厂模式是一种创新的设计模式&#xff0c;其目的是提供一个接口&#xff0c;用于创建相关或相关对象的族&#xff0c;而无需指定其具体类。 创建逻辑封装在工厂中&#xff0c;该工厂提供创建逻辑的方法或将对象的创建委托给子类。 客户端不知道接口或类的不同实现…

服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的

我们都知道SSL认证能够分成SSL双向认证和SSL单向认证。那么&#xff0c;什么是SSL双向认证&#xff1f;SSL双向认证过程又是怎样的&#xff1f;小编就在接下来的内容为各位详细讲述。什么叫SSL双向认证SSL双向认证则是需要是服务端需要客户端提供身份认证&#xff0c;只能是服务…