java excute junit_Shell 执行Junit

1、什么是Shell

Unix操作系统下的shell既是用户交互的界面,也是控制系统的脚本语言。当然在这点也有别于Windows下的命令行,虽然也提供了很简单的控制语句。在Windows操作系统下,可能有些用户从来都不会直接的使用shell,然而在Unix系列操作系统下,shell仍然是控制系统启动、X Window启动和很多其他实用工具的脚本解释程序。

2、怎么用Shell

<1>之前听说过Shell,但是没有仔细用过,所以怎么写,怎么执行等一系列的问题都不知道。会google,就找了个简单的demo!

#/bin/bash

echo "please enter two number"

read a

read b

if test $a -eq $b

then echo "NO.1 = NO.2"

elif test $a -gt $b

then echo "NO.1 > NO.2"

else echo "NO.1 

fi

<2>运行【找到脚本路径,用source命令执行它】

3e4b2537089668b9f65042ac5280d1f7.png

3、Web单元测试

<1>大部分条件下,我们开发的时候,都会做一些简单的单元测试,常见的就是java的JUnit测试框架了。如下:

public class TestBlog extends JFinalModelCase {

public static Logger logger = Logger.getLogger(TestBlog.class);

@Ignore

@Test

public void testJson() {

String columns = BlogConst.CONTENT + Const.SYMBOLCOMMA

+ BlogConst.TITLE;

Blog blog = Blog.dao.findById(1, columns);

ControllerCommon.errorMsg("执行");

JFinalTestUtil.print(JsonKit.toJson(ControllerCommon.ctrCommon

.returnJsonToClient(blog)));

}

@Test

public void testFindFirst() {

Blog blog = Blog.dao.getLastInsertBlog();

logger.info(blog.getInt("id"));

}

@Ignore

@Test

public void testFind() {

Blog blog = BlogService.blogService.findBlogById(1);

logger.info(blog);

}

}

<2> 当我们把代码部署到测试服务器上后(一般都是linux服务器),怎么满足我们的单元测试?有没有一个通用的工具可以直接通过命令来执行一些单元测试用例。OK,终于说到了正题上面,下面我们就开始吧!

4、Shell工具

<1> 下面这几行代码就可以实现了。

#!/bin/bash

#引入java环境变量,如果配置在用户环境变量下就自行修改

. /etc/profile

#获取执行shell给的参数

PRG="${1}"

echo $PRG

#输入包名称,类名称

echo "please input packageName , ClassName"

read packageName

read className

#取得当前.sh文件所在的目录

#DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

DIR="/home/tian/Downloads/tomcat/apache-tomcat-7.0.59/webapps/Jfinal/WEB-INF"

#日志文件的路径

LOG_DIR="/home/tian/Desktop"

#引入class所在的文件夹

classes=$DIR/classes

#lib folder

libs=$DIR/lib/*

#将classes和包jar加入classpath,注意用的是冒号":"分割的

classpath=$classes:$libs

# java -classpath $classpath 主函数类入口 #>>  "$PRG" com.demo.jfinal.JFinalModelCase.java

java -classpath $classpath $packageName.$className  "$PRG">> "$LOG_DIR/javalog.txt"

echo "shell over.."

解读:脚本支持3个参数;参数1:要执行的单元测试的方法;参数2:要执行单元测试的包;参数3:要执行的单元测试的类

<2> 那么如何使用它呢?请看!这也是这个脚本的功能点1

/**

* Unit test for simple App.

*/

public class TestBlog extends JFinalModelCase {

public static Logger logger = Logger.getLogger(TestBlog.class);

@Ignore

@Test

public void testJson() {

String columns = BlogConst.CONTENT + Const.SYMBOLCOMMA

+ BlogConst.TITLE;

Blog blog = Blog.dao.findById(1, columns);

ControllerCommon.errorMsg("执行");

JFinalTestUtil.print(JsonKit.toJson(ControllerCommon.ctrCommon

.returnJsonToClient(blog)));

}

@Test

public void testFindFirst() {

Blog blog = Blog.dao.getLastInsertBlog();

logger.info(blog.getInt("id"));

}

@Ignore

@Test

public void testFind() {

Blog blog = BlogService.blogService.findBlogById(1);

logger.info(blog);

}

public static void main(String[] args) {

String methodExecute = "";

if (args.length == 0) {

logger.info("无参数");

return;

} else {

methodExecute = args[0];

logger.info("args[0]:" + args[0]);

}

logger.info("==================Method Begin:" + "==================");

Result result = new JUnitCore().run(Request.method(TestBlog.class,methodExecute));

for (Failure failure : result.getFailures()) {

System.out.println(failure.toString());

}

logger.info("===================Result: " + result.wasSuccessful() + "==================");

}

}

<3> 找到当前脚本路径,执行它

eac74329284d9900b6a317db33ad972c.png

<4> OK,让我们看一下日志文件【看脚本代码知晓:javalog.txt】

2015-12-25 12:18:09:619[INFO]: args[0]:testFindFirst

2015-12-25 12:18:10:237[INFO]: ==================Method Begin:==================

2015-12-25 12:18:10:716[INFO]: {dataSource-1} inited

Sql: select * from blog order by id desc

2015-12-25 12:18:11:004[INFO]: 8

2015-12-25 12:18:11:039[INFO]: {dataSource-1} closed

2015-12-25 12:18:11:072[INFO]: ===================Result: true==================

<5>那么如何使用它呢?请看!这也是这个脚本的功能点2, TestBlog.java类如上

TestJunit.java:

public class TestJunit {

public static Logger logger = Logger.getLogger(TestJunit.class);

public static void main(String[] args) {

logger.info("==================Method Begin" + "==================");

Result result = JUnitCore.runClasses(TestBlog.class);

for (Failure failure : result.getFailures()) {

System.out.println(failure.toString());

}

logger.info("===================Result: "+ result.wasSuccessful() + "==================");

}

}

<6>找到当前脚本路径,执行它

989c030811deeba895f97cc4f629ea9b.png

解读:这里只需要两个参数就够了,功能是执行TestBlog类的所有@Test方法,排除@Ignore

<7> 再来看看我们的日志文件,多了一条测试记录

2015-12-25 12:18:09:619[INFO]: args[0]:testFindFirst

2015-12-25 12:18:10:237[INFO]: ==================Method Begin:==================

2015-12-25 12:18:10:716[INFO]: {dataSource-1} inited

Sql: select * from blog order by id desc

2015-12-25 12:18:11:004[INFO]: 8

2015-12-25 12:18:11:039[INFO]: {dataSource-1} closed

2015-12-25 12:18:11:072[INFO]: ===================Result: true==================

2015-12-25 12:28:56:377[INFO]: ==================Method Begin:tdd==================

2015-12-25 12:28:56:994[INFO]: {dataSource-1} inited

Sql: select * from blog order by id desc

2015-12-25 12:28:57:232[INFO]: 8

2015-12-25 12:28:57:266[INFO]: {dataSource-1} closed

2015-12-25 12:28:57:299[INFO]: ===================Result: true==================

5、Shell:

1、语法和结构通常比较简单。

2、学习和使用通常比较简单。

3、通常以容易修改程序的"解释"作为运行方式,而不需要"编译"。

4、程序的开发产能优于运行效能。

5、Shell脚本语言是Linux/UNIX 系统上应用广泛的实用程序设计语言,它是"易学难精"的,真正学会Shell 脚本编程,需要读者清晰地掌握Linux 重要命令的语法,理解Linux 命令重要选项的作业和区别,还需要掌握Shell 脚本语言的语法结构以及一些常用的小工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值