中山大学中级实训--Vi,Java,Ant,Junit

Vi,Java,Ant,Junit

1. vi编辑器

1. 1 什么是vi

vi是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。

vi编辑器通常被简称为vi,而vi又是“Visual interface”的简称。它在Linux上的地位就像Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。

1.2 vi工作模式

vi有三种基本工作模式:命令模式、文本输入模式、末行模式。

命令模式

在任意模式下按下ESC键即可以进入到命令行模式,在用户使用vi命令的开始也是这种模式,可以用于移动光标、删除字、进行复制粘贴等操作,在命令行下输入字母是没有任何显示的,一般是直接按功能键执行命令

编辑模式

在命令模式下输入插入命令i、a 、o可以进入编辑模式。该模式下,用户输入的任何字符都被文件输入,可用ESC键回到命令模式下。

末行模式

在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。
如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。

1.3 命令模式下常用命令
  • 进入编辑模式

    i和I: i在光标前插入,I在行首插入

    a和A: a在光标后插入,A在行末插入

    o和O: o在光标所在行下一行插入,O在光标所在行上一行插入

  • 移动光标

    h:光标向左移动

    j:光标向下移动

    k:光标向上移动

    l:光标向右移动

    H、M、L:光标移动到到可见屏幕第一行(H)、中间行(M)、最后一行(L)

    ^:移动到行首

    $:移动到行末

    G和gg:G文档最后一行,gg文档第一行

  • 删除命令

    X和x:x删除光标后一个字符,X删除光标前一个字符,包含光标位置字符

    dd和 n dd:dd删除所在行,n dd删除指定行数

    d0和D:d0删除光标前本行所有内容,D删除光标后本行所有内容,包含光标位置字符

  • 其他功能命令

    u:撤销

    ctrl + r:重做

    .:重复执行上一次操作的命令

    yy:复制当前行,5 yy复制5行

    p: 在光标所在位置向下新开一行粘贴

    v 和 V:v选择单个字符,V选择整行

    <<和>>:选择文本之后,向左缩进,向右缩进

1.4 底行模式下常用命令:
  • 搜索替换

​ r和R:r替换当前字符,R替换光标后的字符

​ / + str:n查找下一个,N查找前一个

​ %s/abc/123/g:将文件中所有abc替换为123

​ 10s/abc/123/g:将第一行至第10行之间的abc替换成123

2. java语言

2.1 什么是java

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等

2.2 java环境配置

这里主要是设置好JAVA_HOME环境变量,一开始用的是whereis java命令,但给出的并不是实际的java路径,后来查阅后使用以下命令来找到java的安装路径。

/usr/libexec/java_home

然后将得到的路径填入到~/.bash_profile文件中。

export JAVA_HOME=$(/usr/libexec/java_home)
2.3 java计算器小程序

这里使用的swingUI库。

import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.*;

public class Carculator extends JFrame{

	public Carculator() {

		JPanel panel;
		JLabel result, op, eq;
		JTextField op1, op2;
		JButton add, sub, mul, div, equal;
	
		setBounds(100, 100, 450, 200);		
		setTitle("Carculator");			
	
		// op1 and op2
		op1 = new JTextField("12");
		op2 = new JTextField("2");
		op = new JLabel("",JLabel.CENTER);
	
		
	
		eq = new JLabel("=",JLabel.CENTER);
	
		result = new JLabel("",JLabel.CENTER);
	
		add = new JButton("+");
		sub = new JButton("-");
		mul = new JButton("*");
		div = new JButton("/");
		equal = new JButton("ok");
		
		panel = new JPanel();
		//2 row 5 col
		panel.setLayout(new GridLayout(2,5));
		panel.add(op1); 
		panel.add(op);
		panel.add(op2);  
	    panel.add(eq);
	    panel.add(result);
		panel.add(add);  
	    panel.add(sub);  
	    panel.add(mul);  
	    panel.add(div);
	    panel.add(equal);
	
	    add(panel);
	    ActionListener res = new ActionListener() {
			public void actionPerformed(ActionEvent e){
				result.setText("");
				double num1 = Double.parseDouble(op1.getText());
				double num2 = Double.parseDouble(op2.getText());
				if(op.getText().equals("+")){
					result.setText("" + (num1 + num2));
				}
				if(op.getText().equals("-")){
					result.setText("" + (num1 - num2));
				}
				if(op.getText().equals("*")){
					result.setText("" + (num1 * num2));
				}
				if(op.getText().equals("/")){
					result.setText("" + (num1 / num2));
				}
			}
		};
		ActionListener chop = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				op.setText(((JButton)e.getSource()).getText());
			}
		};
		
	    // calculate
	    add.addActionListener(chop);
	    sub.addActionListener(chop);
	    mul.addActionListener(chop);
	    div.addActionListener(chop);
		
	    equal.addActionListener(res);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}

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

在这里插入图片描述

3. Ant

3.1 什么是ant

Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于 Java 环境中的软件开发。由Apache软件基金会所提供。Ant 也可以有效地用于构建非Java应用程序,例如 C 或 C++ 的应用程序。更一般地,Ant 可以用来驾驶任何类型的能在目标和任务来描述过程。

3.2 ant使用

Ant 是以 build.xml 为默认的文件,如果不存在 build.xml,则 Ant 会报错,不过我们可以指定特定名称的 xml 文件作为 Ant 编译的文件,使用以下命令进行编译。

ant -buildfile ant.xml

3.3 ant基本元素
project:

project 元素是一个构建xml文件必不可少的元素,且只能有一个此元素,作为最外层的元素,所有其他的元素标签都必须在其包含范围内。

  • name 属性:用于指定 project 元素的名称。
  • default 属性:用于指定 project 默认执行时所执行的 target 的名称。
  • basedir 属性:用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。

target:

target 元素是构建文件执行的基本单位,一个xml文件中可以有多个 target 元素,每一个 target 元素代表一个独立的任务。

  • name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target。
  • depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以 “.” 间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target ,被依赖的 target 会先执行。
  • if 属性:用于验证指定的属性是存在,若不存在,所在 target 将不会被执行。
  • unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。
  • description 属性:该属性是关于 target 功能的简短描述和说明。
property

property 元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。

Javac:编译

Java: 运行

jar

用来生成一个JAR文件

  • destfile表示JAR文件名。
  • basedir表示被归档的文件名。
  • includes表示别归档的文件模式。
  • exchudes表示被排除的文件模式。
  • compress表示是否压缩。

javac

将 java 程序编译成 class 文件

  • srcdir表示源程序的目录

  • destdir表示 classes 文件的输出目录

  • include表示被编译的文件的模式。

  • classpath表示所使用的类路径。

java

执行编译生成的.class文件

  • classname 表示将执行的类名。
  • jar表示包含该类的JAR文件名。
  • classpath所表示用到的类路径。
3.4 ant测试

这里结合了JUnit进行helloworld代码的编译测试。

<?xml version="1.0" encoding="UTF-8"?>
<project name="AntDemo" default="junit" basedir=".">
    <!-- 变量设置  -->
    <!-- 源代码src路径 -->
    <property name="src.path" value="src/java"/>
    <!-- 编译文件class路径 -->
    <property name="build.path" value="build"/>
    <!-- 单元测试代码路径 -->
    <property name="test.path" value="src/test"/>
    <!-- lib包路径 -->
    <property name="lib.path" value="lib"/>         
        
    <!-- 设置classpath -->
    <path id="compile.path">        
        <fileset dir="${lib.path}">
            <include name="**/*.jar"/>
        </fileset>
        
        <pathelement path="${build.path}"/>
    </path>     

    <!-- 清除历史编译class -->
    <target name="clean" description="clean">
        <delete dir="${build.path}"/>
    </target>

    <!-- 编译测试文件,初始化目录 -->
    <target name="compile" description="compile">
        <mkdir dir="${build.path}"/>                        
        <javac srcdir="${src.path}" destdir="${build.path}"  classpathref="compile.path"/>
        <javac srcdir="${test.path}" destdir="${build.path}"  classpathref="compile.path"/>
    </target>      
         
    <!-- 执行测试案例 -->
    <target name="junit" depends="clean,compile">
        <junit printsummary="true">
             <classpath refid="compile.path"/>                  
                      
             <test name="HelloWorldTest"/>
         </junit>
     </target>

</project>

编写好build.xml文件后就可以直接运行ant命令。

在这里插入图片描述

可以看到每一个target都有对应的测试命令和信息的显示,这里junit就是测试的具体结果。

4. JUnit

4.1 什么是JUnit

JUint是Java编程语言的单元测试框架,用于编写和运行可重复的自动化测试。

4.2 JUnit优点
  • JUnit 是一个开放的资源框架,用于编写和运行测试。
  • 提供注解来识别测试方法。
  • 提供断言来测试预期结果。
  • JUnit 测试允许你编写代码更快,并能提高质量。
  • JUnit 优雅简洁。没那么复杂,花费时间较少。
  • JUnit测试可以自动运行并且检查自身结果并提供即时反馈。所以也没有必要人工梳理测试结果的报告。
4.3 JUnit常用注解

@Test:测试注解,标记一个方法可以作为一个测试用例 。

@Before:Before注解表示,该方法必须在类中的每个测试之前执行,以便执行某些必要的先决条件。

@BeforeClass:BeforeClass注解指出这是附着在静态方法必须执行一次并在类的所有测试之前

@After:After注释表示,该方法在每项测试后执行

@AfterClass:当需要执行所有测试在JUnit测试用例类后执行

4.4 常用断言
  • void assertEquals([String message],expected value,actual value)

    断言两个值相等。值类型可能是int,short,long,byte,char,Object,第一个参数是一个可选字符串消息

  • void assertTrue([String message],boolean condition)

    断言一个条件为真

  • void assertNotNull([String message],java.lang.Object object)

    断言一个对象不为空

  • void assertSame([String message],java.lang.Object expected,java.lang.Object actual)

    断言两个对象引用相同的对象

  • void assertArrayEquals([String message],expectedArray,resultArray)

    断言预期数组和结果数组相等,数组类型可能是int,short,long,byte,char,Object

4.5 Junit测试
import static org.junit.Assert.assertEquals;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import org.junit.Before;
import org.junit.Test;


public class HelloWorldTest {
	PrintStream os = null;
	HelloWorld helloworld;
	ByteArrayOutputStream bytes = null;
	//测试前初始化
	@Before
	public void setUp() {
	//获得标准输出流
		bytes = new ByteArrayOutputStream();
		os = System.out;
		System.setOut(new PrintStream(bytes));
	}
	//测试主体
	@Test
	public void testPrint() {
		helloworld = new HelloWorld();
		helloworld.print();			//调用函数
		String str = new String("Hello, World!\n");
		assertEquals(str, bytes.toString());		//判断输出是否一致
	}
	
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值