lustdevil 2011-08-28
后天实训,Linux+vim+java+ant+Junit,真是蛋疼,有eclipse为什么要用那么原始的东西。
折腾了几天,终于在Ubuntu下从安装jdk开始到完成利用ant进行Junit单元测试。ant,Junit网上资料有点少,很多都是在eclipse下使用Junit的,手工编写ant,Junit真是有点少。下面记录下我的过程。
首先,jdk配置就不说了,网上很多资料,先说Junit, 到官网下载 junit-4.9.jar — Basic jar 不知道为什么有那么多版本,反正我下载的是这个,之前直接搜junit.jar下载,尼玛下载那个有问题,还以为是jdk1.7版本太新了,有问题,真是误人子弟。把下载的junit-4.9.jar放入你的Java_home路径下的lib文件夹里(我是直接安装的是/usr/java/jdk1.7.0),然后记得在你配置jdk是的CLASSPATH下加入,比如我的是export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/junit-4.9.jar:$CLASSPATH 尼玛为什么网上那么多资料都没说要着一步,只说了要把jar文件放入lib里,可是我就是不行,还好最后是了下加入CLASSPATH才通过。
junit-4.9.jar下载地址:
具体下载目录在 /pub/2011/08/28/Linux下Ant Junit安装配置及完成单元测试/
先开始写要主类还有测试类吧,代码如下
HelloWorld.java文件
public class HelloWorld {
public String sayHello()
{
return "Hello World";
}
public int getInt(){
return 5;
}
public static void main(String args[]){
HelloWorld world = new HelloWorld();
System.out.println(world.sayHello());
}
}
用来测试的类:
HelloWorldTest.java 貌似jUnit的习惯命名都是在主类后面加Test,测试方法在前面加test,不知道是不是强制的,反正这样也不错。
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class HelloWorldTest extends TestCase{
public HelloWorldTest(String name){
super(name);
}
public static void main(String args[]){
junit.textui.TestRunner.run(HelloWorldTest.class);
}
public void testSayHello(){
HelloWorld world = new HelloWorld();
assert (world != null);
assertEquals("HelloWorld", world.sayHello() );
}
public void testgetInt()
{
HelloWorld world = new HelloWorld();
assertEquals(6, world.getInt() );
}
}
这个时候要嵌入到ant中,首先还是确定下此时junit能否正常工作吧,把上面两个文件放同个文件夹,然后java HelloWorldTest.java 编译,运行测试的话junit跟一般Java程序一样,直接java HelloWorldTest 汗,新手 没办法,一开始真的这个也不知道,以为是junit HelloWorldTest。。。。。高手莫笑。
运行结果不贴上来了。
接下来是ant,还是官网下吧 http://ant.apache.org/ 最新好像是1.82不知道为什么我的Ubuntu自带有ant 不过是1.81的,可能是我之前10.04的时候用apt-get install安装jdk的时候装上的,还是自己学怎么用吧,把下载的安装包解压,复制到/usr/ant下 然后 改环境变量 sudo vim /etc/profile 跟jdk差不多文件最后加上 export ANT_HOME=/usr/ant/apache-ant-1.8.2 同时把刚刚下载的junit-4.9.jar放到里面的lib文件里。
简单点,直接写build.xml吧,我的文件目录是src 存放 .java classes存放 .class build.xml跟src在同级文件夹内
内容如下
<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="compile" basedir="." >
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello.jar" />
<target name="junit">
<available property="junit.present" classname="junit.framework.TestCase" />
</target>
<target name="init" depends="junit">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
<!--
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
-->
<target name="run" depends="compile">
<java classname="HelloWorld" classpath="${dest}"/>
</target>
<target name="test" depends = "compile">
<junit printsummary="yes" >
<formatter type="plain"/>
<classpath path="${dest}"/>
<test name = "HelloWorldTest"/>
</junit>
</target>
</project>
关于ant的xml语法,还是上网查吧。说不清楚,其中<classpath path="${dest}"/>是你要测试的class文件夹,<test name = "HelloWorldTest"/>是你要测试的文件。
到这里总是完成了。。。。。
运行测试可以使用ant test。。运行完会生成运行报告,我故意弄错的测试,结果如下
Testsuite: HelloWorldTest
Tests run: 2, Failures: 2, Errors: 0, Time elapsed: 0.007 sec
Testcase: testgetInt took 0.002 sec
FAILED
expected:<6> but was:<5>
junit.framework.AssertionFailedError: expected:<6> but was:<5>
at HelloWorldTest.testgetInt(Unknown Source)
Testcase: testSayHello took 0 sec
FAILED
expected:<Hello[]World> but was:<Hello[ ]World>
junit.framework.ComparisonFailure: expected:<Hello[]World> but was:<Hello[ ]World>
at HelloWorldTest.testSayHello(Unknown Source)