当前位置:首页 > Java知识 > 正文内容

java中测试类导的包是哪个包(java中测试类如何导子类的包)

abcsky887个月前 (10-27)Java知识94

本篇文章给大家谈谈

译者 | 张洁责编 | 屠敏出品 | CSDN(ID:CSDNnews) Hello World 可能是最简单的计算机入门程序几十年来,许多人在开始使用新的编程语言时,编写的第一个程序通常是 Hello World。

java中测试类导的包是哪个包(java中测试类如何导子类的包)

这不起眼的入门程序没有 Bug,对吗?

图片来自 sunfishcode 的博客毕竟,Hello World 程序只做一件事怎么会有 Bug?万万没想到,有开发者在好奇心驱动下,测试了 16 种常用的语言后,竟然在里面检测出了 7 种编程语言的 Hello World 带有 Bug。

以 C 语言中的 Hello World 程序为例 首先,以 C 语言为例来测试事实“网站推广策略”上,用 C 语言写 Hello World 有很多不同的版本,如维基百科搜索显示的版本、《C 程序设计语言》(也简称 K&R)一书中的 Hello World,甚至还有从 1974 年贝尔实验室备忘录中引入的最古老的 C 语言 Hello World 程序。

图片来自 sunfishcode 的博客这是 "ANSI C "(美国国家标准协会和国际标准化组织对 C 语言发布的标准)中的 Hello World 程序写法:/* Hello World in C, Ansi-style */#include #include int main(void){puts("Hello World!");re“网站推广策略”turn EXIT_SUCCESS;}

对于业界而言,这应该是最标准 C 语言 Hello World 的版本它使用“(void)”来显示 main 是一种新型声明方式这个版本使用 EXIT_SUCCESS 返回值来表示成功,而不是使用 0根据 C 语言标准,这其实没有必要,不过在此我们也不做更改了。

除此之外,它还使用了适当的头文件声明了 puts 函数这个版本试图把所有的步骤都做到完美然而,它里面还是有一个 BugC 语言中的 Bug 从何而来?Linux 有一个有趣的设备文件,叫做“/dev/full”,跟“/dev/null”(程序员群体中行话叫做黑洞,即丢弃一切写入其中的数据,读取它会立“网站推广策略”即得到一个 EOF)非常像,但是当你将数据写入到“/dev/full”时,该文件不会扔掉数据,而会出现错误。

它的作用就像是文件系统中一个刚刚用完空间的文件:$ echo "Hello World!" > /dev/fullbash: echo: write error: No space left on device$ echo $?1

因此用这个文件可以用来测试程序是否正确处理 I/O 错误创建没有剩余空间的实际文件系统或实际发生故障的磁盘很不方便,但要求程序将其输出写入“/dev/full”文件中,看看会发生什么吧所以让我们测试一下上面的 C 语言示例:。

$ gcc hello.c -o h“网站推广策略”ello$ ./hello > /dev/full$ echo $?0与我们在上面的 shell 脚本中使用 echo 时不同,在这里,我们没有得到任何输出的内容,返回值为 0。

这意味着 Hello World 程序执行成功了然而,它实际上并没有成功我们可以使用 strace 进行确认:$ strace -etrace=write ./hello > /dev/fullwrite(1, "Hello World!\n", 13) = -1 ENOSPC (No space left on device)+++ exited with 0 +++。

操作系统提示了 "No space"错误但是,程“网站推广策略”序还是成功执行了,并返回值为 0,这以为系统认为这一段代码是成功的显而易见,这是一个 Bug!那么,这个 Bug 有多严重呢?可以说,Hello World 不应该作为标准的测试代码,因为它并不是绝对的安全。

此话应该从何说起?想必很多程序员在初次学习编程的时候,大多数会用 Hello World 程序来试一下这也导致了 Hello World 常被开发者用来检测程序的标准输出,但是因为此时 Hello World 程序存在 Bug,所以 prints 的标准输出往往可能会被重定向到另一个文件。

譬如,现实世界中,如果文件占用了全部的空间此时用 Hello World 程序来检测,最终并没有检测任“网站推广策略”何问题,那么该代码的父进程将不知道子进程失败了,会继续运行,即使系统期望产生的输出内容已经悄悄地丢失了数据,但程序还是像什么都没有发生一样。

举个例子,编写一个程序,其中主要是 prints 一个 yaml 文件到标准输出如果标准输出的空间用完了,输出可能会在某个任意的点被截断,尽管它仍是有效的 yaml所以我们期望程序能够检测并报告这种情况。

7 种主流语言常见的 Hello World 程序都有 Bug?除了 C 语言之外,Python 告诉我们“Bug 不应该被无声地忽视”,下面是 Python 2 的测试示例:$ python2 hello.py > /dev/fullclose fail“网站推广策略”ed in file object destructor:sys.excepthook is missinglost sys.stderr$ echo $?0

它确实向 stderr 输出了一条信息,并且还是一条令人困惑的信息然而,它也返回了 0,这意味着它在告诉运行它的人,它成功退出了幸运的是,Python 3 正确地报告了错误,而且还显示了一个更漂亮的错误信息。

$ python3 hello.py > /dev/fullException ignored in: mode=w encoding=utf-8>OSError: [Errno 28] No space left on device“网站推广策略”$ echo $?120

另外,我也还是使用普通教程网站上的 Hello World 程序,尝试了其他几种编程语言,以下是测试结果:语言是否有Bug测试的版本C 是(全部)C++ 是(全部)Python 2 是Python 2.7.18

Ruby是ruby 2.7.2p137(2020-10-01 修订版 5445e04352)[x86_64-linux-gnu]Java是openjdk 11.0.11 2021-04-20Node.js

是v12.21.0Haskell是Glorious Glasgow Haskell 编译系统,版本 8.8.4Rust否rustc 1.59.0 (9d1b210“网站推广策略”6e 2022-02-23)Python 3

否Python 3.9.5Perl否perl 5,版本 32,subversion 1 (v5.32.1) 为 x86_64-linux-gnu-thread-multi 构建(带有 46 个注册补丁...)

Perl 6否v2020.12Bash否GNU bash,版本 5.1.4(1)-release (x86_64-pc-linux-gnu)Awk 否GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)

OCaml否4.08.1Tcl否8.6.11C# 否Mono JIT 编译器版本 6.8.“网站推广策略”0.105原文链接:https://blog.sunfishcode.online/bugs-in-hello-world/

声明:本文为 CSDN 翻译,转载请注明来源。—END— 《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://4blc.com/post/461.html

分享给朋友:

“java中测试类导的包是哪个包(java中测试类如何导子类的包)” 的相关文章

什么是阿里p8(阿里p8 m)

今天给各位分享 原标题:为面阿里P8,我肝了一份651个技术分支的脑图,要么?(限时领)这半年,很多人选择安稳,我偏偏不哥们我就想要跳槽,要不干脆去面个【P8 级架构师】吧,也算是摸摸行情,为后面的一些安排提前做好规划~。 差点儿就栽了,但哥一直都是超稳的,妥妥的过程中发现...

java面向对象知识点(java面向对象知识点总结笔记)

今天给各位分享 面向对象思想概述面向对象是基于面向过程的编程思想面向对象思想特点是一种更符合我们思想习惯的思想可以将复杂的事情简单化将我们从执行者变成了指挥者角色发生了转换面向对象是什么意思呢?面向对象程序设计是将人们认识世界过程中普遍采用的思维方法应用到程序设计中。 对象...

java是面向对象的程序设计语言(java是面向过程的与平台无关的网络编程语言)

今天给各位分享 JAVA是面向对象的两者的区别如下,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行...

谁被誉为java之父(java之父是谁?)

本篇文章给大家谈谈 前不久,TechRepublic 发表了一篇文章讨论关于开发人员喜爱与讨厌的语言结果很有意思:Java 在最受欢迎的语言排行榜名列第三,同时在最讨厌的语言中排在第二名显然,Java 作为一门开发语言,人们对它的看法形成了两极分化。 对此 C++ 的创始人...

java培训一般多少费用(java就业真实现状)

本文分享给大家的是: 初识java1、java是什么(1)java是一种计算机编程语言编程是把我们的要求和想法,按照能够让计算机看懂的规则和约定编写出来,编程的结果就是一些计算机能够看懂并能够执行和处理的东西,我们把它叫做软件或者程序,事实上,程序就是我们对计算机发出的命令集(指令...

wordpress的文章在数据库里吗?(wordpress 数据库设计)

本文分享给大家的是: 原标题:WordPress 二次开发中如何与其数据库通信?低代码建站教程WordPress 二次开发中如何与其数据库通信?WordPress 网站是一个动态的、数据库驱动的 Web 应用程序它本质上意味着两件事:绝大多数网站内容都存储在WordPress 数据...