使用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

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

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

相关文章

转行python能拿到多少钱_想转行学python过来人提醒大家几点

因为目前python非常火,应用也非常广泛,是目前最火的行业之一,竞争很大,工资很高,未来发展也极好。Python 现在到底有多热呢?我觉得我们可以看以下的这2组数据。第一:Python 排名稳居前五得益于 …

纯前端 导出excel 插件xlsx和file-saver

使用插件 xlsx 导出表格,file-saver保存文件 vue-element-admin,源码中找的;导出上万条数据还是很快的 gitHub地址,/vendor/Export2Excel的js文件 使用方法 export_json_to_excel({header: res.header,data: res.exportData,filename: ${fileName}1-$…

用Java创建自己的AOP

介绍 如您所知,AOP是Spring框架提供的最好的功能之一,它在实现跨领域关注的同时提供了最大的灵活性。 您是否想到过AOP在Spring如何工作? 有时这是高级技术面试时要问的问题。 有时,仅涉及核心Java时,这个问题变得更加…

linux中常用的头文件

#include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件。 #include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。 #include <mach/***.h> 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。 #in…

java的文本框如何回车键触发按钮_java回车触发按钮的代码

使用的时候&#xff0c;只要将SwingUtils .enterPressesWhenFocused(JButton)这样就可以实现回车时候&#xff0c;触发按钮。另外文本输入框回车触发事件则是&#xff1a;SwingUtils .enterPressesWhenFocused(JTextField textField,ActionListener actionListener) 。其中acti…

Typescript Interface 覆盖继承的接口定义

type Merge<M, N> Omit<M, Extract<keyof M, keyof N>> & N;使用方式 interface A {name: string;color?: string; } type B Merge<A, {name: string | number;favorite?: boolean; }>;参考地址

JBoss Fuse –一些鲜为人知的技巧

TL; DR 将Java静态调用公开为Karaf Shell本机命令 在部署时覆盖OSGi标头 在使用OSGi片段部署时间后覆盖OSGi标头 将Java静态调用公开为Karaf Shell本机命令 作为必须与支持人员和客户进行协作的软件工程师的一部分&#xff0c;我经常发现自己需要从无法访问的系统中提取其他…

cocos2d-x学习笔记之图片分辨率适配

从wiki里面看到&#xff0c;新的版本是去掉了enabelRetinaDisplay&#xff0c;因为要兼容iosandroid&#xff0c;其他平台是否也是如此&#xff0c;未知&#xff5e; 测试代码 std::vector<std::string> resDirOrders; resDirOrders.push_back("testImage2"…

vue 外部方法调用内部_vue函数内部调用外部函数,报错外部函数不是函数

zeroFill (num,len,radix) {let str num.toString(radix || 10);while (str.length < len) {str 0 str;}return str;},initMap() {console.log(this.zeroFill(50, 8, 16))//底图图层数据源var googleDXSource new XYZ({tileUrlFunction: function (coor) {console.log(c…

electron+react 用户自定义安装路径

使用electron-builder打包electron项目&#xff0c;其中Windows提供了NSIS来自定义安装程序。 在主进程的package.json文件中添加一些配置 "scripts":{},"build": {"directories": {"output": "release"},"nsis":…

模型微调入门介绍一

备注&#xff1a;模型微调系列的博客部分内容来源于极客时间大模型微调训练营素材&#xff0c;撰写模型微调一系列博客&#xff0c;主要是期望把训练营的内容内化成自己的知识&#xff0c;我自己写的这一系列博客除了采纳部分训练营的内容外&#xff0c;还会扩展细化某些具体细…

JMH:如何设置和运行JMH基准

健康警告&#xff01; 这篇文章描述了如何设置和运行简单的JMH基准测试。 众所周知&#xff0c;微基准测试很难正确设置&#xff0c;即使您确实正确设置了&#xff08;通过使用JMH之类的工具&#xff09;&#xff0c;它们仍然会产生误导。 仅仅因为您的代码在极端孤立的人为情况…

npp夜光数据介绍 viirs_科研成果快报第177期:中国地区长时序AVHRR气溶胶数据的主要问题: 气溶胶反演频次与重污染天气...

中国地区长时序AVHRR气溶胶数据的主要问题&#xff1a;气溶胶反演频次与重污染天气A critical view of long-term AVHRR aerosol data record in China: Retrieval frequency and heavy pollution成果信息Minghui Tao, Rong Li, Lili Wang et al. (2020)A critical view of lon…

使用Eclipse创建一个Android程序方法

要编写Android程序&#xff0c;需要安装JDK、Eclipse和Android SDK。 Android SDK的安装路径不要在program file或program file(x86)下&#xff0c;否则在debug时会碰很奇怪的问题。最好直接放在C:\Android下。&#xff08;如果非要放在Program files下也可以&#xff0c;在ecl…

ahooks useVirtualList 滚动条抖动或者数据抖动

原因 页面内容高度发生变化引起滚动条跳动的问题。浏览器会自动触发onscroll事件&#xff0c;调整滚动条的位置&#xff0c;让滚动条不乱跳动 ; 懒加载的时候由于不断更新列表项内部的高度&#xff0c;因此就会使浏览器自动触发滚动事件&#xff0c;而滚动事件又触发懒加载的更…

如何使用Hibernate批处理DELETE语句

介绍 在我以前的文章中 &#xff0c;我解释了批处理INSERT和UPDATE语句所需的Hibernate配置。 这篇文章将继续本主题的DELETE语句批处理。 领域模型实体 我们将从以下实体模型开始&#xff1a; Post实体与Comment具有一对多关联&#xff0c;并且与PostDetails实体具有一对一…

蓝点linux_新闻速读 gt; Windows 10 的 Linux 内核将像驱动程序一样由微软更新服务进行更新 | Linux 中国...

本文字数&#xff1a;3252&#xff0c;阅读时长大约&#xff1a;4 分钟导读&#xff1a;• Ubuntu 发行商 Canonical 将参加微软欧洲虚拟开源峰会 • 树莓派支持 Vulkan 最新进展&#xff1a;通过 70000 项测试 • 谷歌浏览器开始隐藏 URL 详细路径&#xff0c;未来地址栏将只显…

struts2-通配符和动态方法调用

通配符举例--BookAction 1 public class BookAction extends ActionSupport {2 3 public String execute() throws Exception {4 System.out.println("BookAction ********** execute()");5 return null;6 }7 /*8 * 显示图书添加页…

JavaFX技巧18:路径剪切

我最近注意到&#xff0c;我致力于ControlsFX项目的PopOver控件无法正确剪切其内容。 当我为FlexCalendarFX框架开发手风琴弹出窗口时&#xff0c;这一点变得显而易见。 每当最后一个标题窗格扩展时&#xff0c;其底角不再是圆角而是正方形。 在将红色矩形作为内容放置到标题窗…

electron 微信扫码登录 ERR_PROXY_CONNECTION_FAILED

electron: Failed to load URL with error: ERR_PROXY_CONNECTION_FAILED 解决 电脑代理问题;电脑设置里面找到代理,关闭就好了