跳至主要內容

4、添加testOption-便于单元测试

引领潮流小于 1 分钟手动编写jvm虚拟机jvmgo

原因

自己手动写java虚拟机源码,属于章回式讲课。

实际项目,要减少冗余重复代码,让接手的人易于理解

也要有单元测试类,便于项目重构

因此添加testOption

测试参数

增加 -test

type Cmd struct {
	testOption  string  // 指定测试方法
}

func parseCmd() *Cmd {
	//增加测试方法
	flag.StringVar(&cmd.testOption, "test", "", "test")
}

main函数调用

根据cmd.testOption内容判断调用测试方法

func main() {
	cmd := parseCmd()

	if cmd.versionFlag {
		fmt.Println("version 0.0.1")
	} else if cmd.helpFlag || cmd.class == "" {
		printUsage()
	} else if cmd.testOption == "cmd" {
		parseCmdLine(cmd)
	} else if cmd.testOption == "classpath" {
		parseClasspath(cmd)
	} else {
		startJvm(cmd)
	}

}

测试shell脚本

#!/bin/sh
set -ex

cd ./go
export GOPATH=$PWD
#main 编译目录
go run main -version
//测试 命令行功能
go run main -test "cmd" 12 344 567
//测试类查找功能
go run main -test "classpath" java.lang.Object

实战项目地址

https://gitee.com/yinlingchaoliu/jvmgo.git