junit junit_使用junit做其他事情

junit junit

junit!=单元测试

Junit是Java单元测试框架。 通常,我们将它用于单元测试,但是很多时候我们也使用它来执行集成测试。 主要区别在于,单元测试测试单个单元,而集成测试则测试不同类如何协同工作。 这样,集成测试可以覆盖更长的执行链。 这意味着与单元测试相比,它们可能发现更多的错误,但同时它们通常运行更长的时间,并且如果测试失败,则更难找到错误。 如果您(作为开发人员)知道这些差异,那么使用junit执行非单元测试就没有错。

当使用junit框架执行系统测试时,我已经在生产代码中看到了示例,其中测试的执行链包括通过网络进行的外部服务调用。 Junit只是一种工具,因此,即使您知道其缺点,也没有本质上的问题。 但是,在实际情况下,junit测试的执行是在正常的maven测试阶段执行的,并且一旦外部服务中断,代码就无法构建。 这很不好,因为清楚地表明开发人员在创建代码时并未意识到包括外部服务和构建过程在内的全局情况。

说完这些之后,让我告诉您一个不同的故事,稍后再加入这两个主题。

我们说语言...很多

大多数时候,我们的程序都有用户界面。 该界面包含文本,通常使用不同的语言。 通常以代码所针对的英语和当地语言。 文本文字通常是外部化的,存储在“属性”文件中。 对于多种语言,我们为每种语言都有单独的属性文件,每种属性文件都为id定义文字文本。

例如我们有文件

messages-de.properties
messages-fr.properties
messages-en.properties
messages-pl.properties
messages.properties

在Java代码中,我们通过Spring MessageSource调用来访问它们

String label = messageSource.getMessage("my.label.name",null,"label",locale);

我们,程序员有点懒

当我们没有一些文本翻译时,问题就来了。 用不同语言指定标签实际文本的工作不属于程序员。 程序员是精通Java,C和其他编程语言的人,但是在涉及自然语言时并没有真正的光辉。 我们大多数人不会说所有需要的语言。 有人负责翻译文本。 通常,不同的人使用不同的语言。 其中一些工作速度更快,另一些工作速度较慢,编码只是等不及翻译准备就绪。 在最终翻译可用之前,我们使用临时字符串。

所有临时解决方案都将成为最终解决方案。

临时字符串(只是英文版)已包含在发行版中。

流程和纪律:失败

为避免这种情况,我们实施了一个流程。 我们为每种翻译打开了一个Jira问题。 当翻译准备就绪时,它就附属于该问题。 当将其编辑到属性文件中并提交到git时,问题已关闭。 如此沉重的负担和开销,使程序员为此放慢了速度,而纪律不明的程序员只是没有遵循该过程。 通常这是一个坏主意。

我们得出的结论是,不转换为属性文件并不是真正的大问题。 问题是不知道它丢失并创建发行版。 因此,我们需要一个过程在发布之前检查属性文件的正确性。

光路过程与控制

手动检查会很麻烦。 我们创建了junit测试,该测试比较了不同的语言文件,并检查了另一个语言文件中是否没有键,并且这些值与默认的英语版本不相同。 每次发布项目时都要执行junit测试。 然后我们意识到其中一些值确实与英文版本相同,因此我们开始在语言文件的第一个位置使用字母“ X”来表示正在等待真正翻译价值替换的标签。 此时有人建议将junit测试替换为简单的“ grep”。 几乎是事实,只是我们仍然希望发现丢失的键并在发布过程中自动测试运行。

摘要和总结

Junit框架旨在执行单元测试,但是这些框架不仅可以用于其设计目的,而且可以而且将被使用。 (附带说明:对于任何工具,实际上都是正确的,无论是像锤子一样简单,还是像Java接口中的默认方法一样复杂。)

您可以使用junit执行可以在构建和/或发布的测试阶段执行的任务。

  • 任务应该快速执行,因为执行时间会增加构建/发布周期。
  • 不应依赖外部资源,尤其是通过网络可访问的外部资源,
    因为这些故障可能还会导致构建过程失败。
  • 如果某些内容对于构建不可接受,请使用junit api发出失败信号。 不要只写警告。 没有人阅读警告。

翻译自: https://www.javacodegeeks.com/2015/02/using-junit-something-else.html

junit junit

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

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

相关文章

C 的 3种内存顺序,你都知道吗?

1、std::memory_order_relaxed “自由”内存顺序在原子类型上的操作以自由序列执行,没有任何同步关系,仅对此操作要求原子性。例如,在某一线程中,先写入A,再写入B。但是在多核处理器中观测到的顺序可能是先写入B&#…

java面试问题你遇到的难题_在Java面试中常遇到的技术问题汇总

在Java面试中常遇到的技术问题汇总 如果你正准备参加Java开发岗位面试,那么你会遇到很多有关多线程的面试问题。为什么呢?因为多线程和并发问题已经成为Java面试中必不可少的一部分。大多数企业在面试的时候都喜欢用棘手的Java线程面试题来考察面试者,他们希望确保面试者对J…

在邮件标头中找到无效的字符_在实践中重试HTTP标头

在邮件标头中找到无效的字符Retry-After是鲜为人知的HTTP响应标头。 让我引用RFC 2616(HTTP 1.1规范)的相关部分: 14.37重试后 Retry-After响应标头字段可与503 ( 服务不可用 )响应一起使用,以指示请求客…

C 常见的面试知识点(上)

const 作用1,修饰变量,说明该变量不可以被改变2,修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer)3,修饰引用&…

brew下载的mysql卸载_Mac中mongoDB的安装与卸载步骤详解

前言MongoDB 是一个基于分布式文件存储的数据库,旨在为 web 应用提供可扩展的高性能数据存储解决方案。本文主要介绍的是关于在mac中安装卸载mongoDB数据库的方法,更多关于mongoDB的使用大家可以参考这篇文章:https://www.jb51.net/article/7…

java 指令重拍_我发现我的Java重拍了!

java 指令重拍在一月份,我写了一篇文章,介绍了一些我希望在Java语言中看到的变化,这些变化会让我更加喜欢它(并使它变得更现代)。 很多人建议使用许多JVM语言,但我很大程度上不予理会,因为这不是…

java post webservice_[java.webservice] 如何通过HttpPost从服务器上获得一个sessionid

javas Web Service is different from HttpPost, HttpGet and HttpResponse that kind of things. It is more easy to pass anything, any Object you like.如果要利用Web Service返回一个sessionid的话,可以使用从Server返回返回值的形式,也可以在Clie…

C 常见的面试知识点(下)

inline 内联函数的特征相当于把内联函数里面的内容写在调用内联函数处;相当于不用执行进入函数的步骤,直接执行函数体;相当于宏,却比宏多了类型检查,真正具有函数特性;编译器一般不内联包含循环、递归、swi…

php cdi_集成CDI和WebSockets

php cdi考虑尝试一个简单的Java EE 7原型应用程序,该应用程序涉及JAX-RS(REST),WebSockets和CDI。 注意 :不想让它成为破坏者-但本文主要讨论我在尝试使用Web套接字和使用CDI作为“胶水”(在Java EE应用程…

c语言排序方法有哪几种?

c语言排序方法有:1、简单选择排序,基于O(n2)时间复杂度的排序算法;2、冒泡排序;3、简单插入排序;4、希尔排序;5、归并排序,基于归并操作的一种排序算法;6、快…

java 类型不可视_jvm高级特性(5)(1)(原子性,可见性,有序性,volatile,概述)

简介:阿姆达尔定律(Amdahl):该定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力。摩尔定律(Moore):该定律用于描述处理器晶体管数量与运行效率间的发展关系。当价格不变时,集成电路上可容纳的元器件的数…

工程模式和抽象工厂模式_功能工厂模式

工程模式和抽象工厂模式您是否需要一种非常快速的方法来制作Factory对象? 然后,您需要lambda或其他函数传递! 它不仅快速,而且非常简单。 我敢打赌,如果您对Lambdas相当满意,那么您只需阅读标题就可以做到这…

c语言怎么输入3个数输出最大值

方法:首先使用scanf()接收从键盘输入的三个数;然后使用“if else”语句比较三个数的大小,获得最大值;最后使用print()函数将最大值输出即可。c语言输入3个数输出最大值#include int main() { // 输入abc输出最大值 int a; …

java调用ecdh_椭圆曲线ECC ECDH原理 javacard实现

椭圆曲线原理:椭圆曲线的图像并不是椭圆形,椭圆曲线源自于求椭圆弧长的椭圆积分的反函数。定义:椭圆曲线可用下列方程来表示,其中a,b,c,d为系数。E: y2 ax3 bx2 cx d椭圆曲线运算:(相当于交换群)AB&#x…

C 常用新特性(上)

下面是正文:auto类型推导auto可以让编译器在编译器就推导出变量的类型,看代码:利用auto可以通过右边的类型推导出变量的类型。什么时候使用auto呢?简单类型其实没必要使用auto,然而某些复杂类型就有必要使用auto&#…

等级保护测评工作重点难点_重点保护

等级保护测评工作重点难点在“ Java的一些句子 ”一文中,我写道: “受保护的方法和字段可以在同一包中的类中使用(到目前为止与私有包相同),此外,还可以从其他类中使用受保护的方法和字段,这些类…

c编译程序是什么?

c编译程序是由计算机厂家提供的一套软件。c编译程序又称c语言编译器,是指用c语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。它以高级程序设计语言书写的源程序作为输入,而以…

运动基元_基元需要走吗?

运动基元我目前正在使用JSF作为视图技术,使用JPA作为持久层的企业应用程序。 它可能是支持bean或服务方法中的某种东西,但令我震惊:是否有充分的理由在企业应用程序中使用原语? 当我开始围绕J2SE 1.2(或者是J2SE 5.0&…

mysql 三种工作模式_mybatis三种批量插入方式对比【面试+工作】

准备:1.表结构CREATE TABLE t_user (id varchar(32) CHARACTER SET utf8 NOT NULL COMMENT 主键,name varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT 用户名,del_flag char(1) CHARACTER SET utf8 DEFAULT NULL COMMENT 删除标示,PRIMARY KEY (id)) ENGINEI…

C 常用新特性(下)

多线程什么是多线程这里就不过多介绍,新特性关于多线程最主要的就是std::thread的使用,它的使用也很简单,看代码:这里记住,std::thread在其对象生命周期结束时必须要调用join()或者detach(),否则程序会term…