`
simpleman7210
  • 浏览: 18956 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

为这个虚拟机写测试例子

阅读更多
应panqj_hust的需要,我举例说明如何为这个虚拟机写测试例子。我在开发这个虚拟机的过程中,为了检查是否正确,也写了好些测试Java类。这些例子很多,不在这里一一列举出来。我只是举一两个例子,说明怎么写测试例子。实际上不难写。

例子1:

class Ball extends Exception
{
}

class Pitcher {

private static Ball ball = new Ball();

public static void main(String[] args) {
main();
}

public static void main() {
playBall();
}

static void playBall() {
int i = 0;
for (;;) {
	try {
		if (i % 4 == 3) {
			throw ball;
		}
		++i;
	} catch (Ball b) {
		i = 0;
	}
}
}

}


这个例子我是摘自“深入Java虚拟机”,除了增加了main()方法,好让我的虚拟机可以执行外,其它没有什么改动。(注意,我的虚拟机版本暂时不支持main(String[])方法启动,只支持main()方法启动)

先用javac编译Ball和Pitcher。然后用g++编译我的虚拟机版本(编译命令参考下载包里面的compile.txt)。运行虚拟机,假设可执行程序名为JVMTest2.exe(Windows上),运行命令如下:
   JVMTest2.exe -d4 Pitcher
那么你就会看到详细的输出。可选参数-d4控制调试信息的输出详细程度。d4已经是很详细了,你也可以用d0,d1,d2,d3。如果d0的话,可能什么信息也没有输出,除了程序发生错误时的异常信息。

上面这个例子是一个“扔球游戏”,而且永远不会结束。这个例子正常运行起来,至少能说明:a.类的初始化方法<clinit>确实被调用了,在这里类的初始化,new了一个Ball的实例。b.异常抛出和处理确实执行了。因为这个例子不断地抛出和捕捉异常。d4参数会导致详细的信息输出来,如果你足够耐心,可以观看分析这些输出,细到每个指令的执行结果,都输出来了。(对于这个例子,因为是死循环,我在调试器里设置断点调试跟踪,就知道了虚拟机执行是否正确)

再举一个例子,这个例子请参考我前面的一篇文章:
[url]
http://simpleman7210.iteye.com/blog/1953969
[/url]


在这个例子中,有两个类Subclass和Superclass。运行这个例子:
   JVMTest2.exe -d4 Subclass
这个例子若被正确执行,至少能说明这样几点:invokespecial指令被正确执行了,invokevirtual指令被正确执行了。

倘若一个类有自己的包名,运行的时候要指出类的全名称,比如:
  JVMTest2.exe -d4 test/arithmetic/ClassTestArithmeticOperations
这里ClassTestArithmeticOperations是一个Java类,在包test/arithmetic下面。在我这个虚拟机中,包名之间用斜杠'/'而不是点号'.',这只是因为一时的方便,暂时没有支持点号。

ClassTestArithmeticOperations是我写的一个测试例子,用来检查加减乘除指令实现的正确性,其代码如下。
package test.arithmetic;

public class ClassTestArithmeticOperations
{
public static void main(String[] args) {
main();
}

public static void main() {
int i1 = 10;
int i2 = 20;
int i3 = i1 + i2;
int i4 = i1 - i2;
int i5 = i1 * i2;
int i6 = i1 / i2;
long l1 = 12345678901L;
long l2 = 10000L;
long l3 = l1 + l2;
long l4 = l1 - l2;
long l5 = l1 * l2;
long l6 = l1 / l2;
float f1 = 0.12345f;
float f2 = 0.00001f;
float f3 = f1 + f2;
float f4 = f1 - f2;
float f5 = f1 * f2;
float f6 = f1 / f2;
double d1 = 0.12345;
double d2 = 0.00001;
double d3 = d1 + d2;
double d4 = d1 - d2;
double d5 = d1 * d2;
double d6 = d1 / d2;
}

}


分享到:
评论
1 楼 panqj_hust 2013-11-10  
谢谢。我在您的“java虚拟机开发,刚刚走通执行了一段测试java代码”的博客里,看到了v02版本,里面有个测试代码ClassHasStaticMethod,正在对照学习。
在这篇博客,我看到了d4的调试方法,应该很强大,期待可以试验下。

相关推荐

    VC++检测VM、VPC虚拟机代码的检测例子

    虚拟机通过模拟硬件环境为操作系统提供了一个独立的运行空间,但它会在某些方面留下痕迹,比如特定的硬件ID、驱动程序签名、系统时间序列等。这些特征可以被用来作为检测虚拟环境的依据。 在VC++中,我们可以利用...

    控制qemu虚拟机.zip易语言项目例子源码下载

    这个项目对于以下几类人群具有较高的学习价值: 1. 学习者:通过实践,可以深入理解虚拟化技术的原理,掌握易语言的高级应用。 2. 学生:对于计算机科学专业的学生,这样的项目可以帮助他们完成毕业设计,提高解决...

    易语言判断系统是虚拟机还是物理机源码

    而判断一个系统是否运行在虚拟机或物理机上,有时是必要的,例如,为了测试软件兼容性或者安全检测。易语言,一种中文编程语言,被用于这个特定的场景,来创建一个程序来识别系统环境。 易语言是一种面向对象的、以...

    webservice的一个测试例子

    要运行这个Web服务测试例子,首先需要解压文件,然后可能需要使用Java编译器(javac)编译源代码,并使用Java虚拟机(java)运行服务或测试。如果包含WSDL文件,可以使用工具如wsimport生成客户端代码,以便于调用...

    虚拟机linux安装教程

    通过这个教程,你已经在虚拟机中成功安装了一个带有大根分区的Linux系统,为编译内核和其他大型项目提供了足够的空间。现在你可以开始进行实验文档中提到的增加系统调用的实验,或者进行其他Linux相关的学习和实践了...

    易语言源码控制qemu虚拟机.rar

    一个简单的例子是,通过易语言编写一个控制脚本,启动QEMU虚拟机并自动加载特定的ISO镜像文件,然后在虚拟机内部执行一系列自动化测试。首先,创建QEMU进程,设置参数如虚拟机类型、内存大小、网络配置等;接着,...

    win98虚拟机打包文件

    在这个例子中,它是Windows 98操作系统的所有内容,包括系统文件、用户数据、设置等。 在使用这个打包文件时,用户需要拥有合适的虚拟化软件,如VMware Workstation或Oracle VirtualBox。首先,他们需要将这个.vmdk...

    怎样做虚拟机下双机热备

    在这个例子中,推荐使用VMwarews6.0.2完美中文绿色精简版。安装过程简单,只需运行安装脚本并根据提示进行配置。 安装完成后,创建新的虚拟机。选择操作系统类型,例如Windows Server 2003,为虚拟机命名,并设置...

    在windows上安装VirtualBox虚拟机以及linux环境搭建

    在这个例子中,我们选择了版本4.2.6。安装步骤如下: 1. 同意软件安装条款:在安装过程中,系统会提示你阅读并接受许可协议,确保你理解并同意这些条款后继续。 2. 选择软件安装目录:你可以选择默认的安装路径,...

    设置虚拟机中Linux与主机通讯

    在VMware中,我们找到`VMWare Network Adapter VMnet1`,这是VMware为虚拟机创建的虚拟网络适配器。为了使主机和虚拟机能够通讯,我们需要将`VMware Network Adapter VMnet1`的IP地址设置为Linux虚拟机的网关地址,...

    关于云计算环境中虚拟机快照技术的综述.pdf

    虚拟化技术不仅应用在云计算平台中,它还允许物理服务器上同时运行多个虚拟机,这使得资源可以更加充分地利用。通过虚拟化技术,可以创建一个完整的虚拟机,用户无需关心硬件的具体物理位置,甚至不需要关心管理和...

    虚拟机安装VXWORKS

    在这个例子中,我们选择了VMware,这是一款流行的虚拟机软件,支持多种操作系统。以下是在VMware下安装VXWORKS的步骤: 1. **安装VMware**: 下载并安装适用于您操作系统的VMware版本。确保您的硬件配置满足VMware和...

    vmware12安装配置虚拟机

    在这个例子中,我们看到虚拟机使用了VMware的vmnet8网络,其IP地址为192.168.18.1,这通常对应于NAT模式。虚拟机内部的IP地址为192.168.18.179,这表明虚拟机已成功获取到了这个网络的IP地址。 “端口映射”是...

    7虚拟机的使用1

    在这个例子中,HOST1与VMNet1绑定,而HOST2则与VMNet8绑定。这种配置方式使得每台虚拟机可以通过对应的虚拟网络适配器连接到各自的网络。 2. **网络连接**:接着,虚拟路由器(或者称为交换机)被用来连接这些虚拟...

    java导出成可脱离虚拟机运行产品的工具

    为了解决这个问题,开发人员可以利用特定的工具将Java程序转换为独立的可执行文件,这样即使目标系统上没有安装JVM,程序也能正常运行。这些工具被称为“Java到EXE转换器”,标题和描述中提到的“java导出成可脱离...

    Java虚拟机中冷对象的研究_骆凡.caj

    虚拟机提供了一个强大的内存管理 功能,由于其中包括了垃圾回收功能, java 程序员不再需要像 c/c++ 程序员一样去进 行内存空间回收的处理。但也正是因为这样的原因,虚拟机扮演如此重要的角色,所 以虚拟机的优化...

    虚拟机中安装CentOS 7

    在这个例子中,我们使用的是VMware Workstation 14。虚拟机软件允许我们在一个主机操作系统上模拟运行另一个操作系统,无需额外的硬件。在创建新的虚拟机时,应确保至少分配10GB的磁盘空间给CentOS 7,因为这是基本...

    oracle 100M的虚拟机.rar

    在这个例子中,"oracle 100M的虚拟机.exe"很可能是用于启动或安装虚拟机的程序。 5. **安装与配置**:在使用这个100M的Oracle虚拟机时,用户需要先将.exe文件解压,然后按照提示启动虚拟机。在虚拟机内部,可能需要...

    spring的一个简单的例子

    Spring 框架是Java开发中的一个核心...以上是对"spring的一个简单的例子"可能包含的内容的详尽解读,这个压缩包为初学者提供了一个基础的Spring应用实践,通过学习和实践,可以帮助理解Spring的核心概念和工作原理。

Global site tag (gtag.js) - Google Analytics