JUNIT測試通過的HelloWorld
發表時間:2023-08-17 來源:明輝站整理相關軟件相關文章人氣:
[摘要]把我剛測試成功的例子(3分鐘前)記錄下來放在這里,希望會對剛開始研究Junit的朋友有點幫助。 到jakarta當一份apache-ant安裝到你的系統上,并把ant/bin加到系統變量path中,...
把我剛測試成功的例子(3分鐘前)記錄下來放在這里,希望會對剛開始研究Junit的朋友有點幫助。
到jakarta當一份apache-ant安裝到你的系統上,并把ant/bin加到系統變量path中,使你的ant命令可以在任何地方被調用。
當一份junit3.8.1安裝到你的系統上(解壓縮,把junit.jar加到系統變量classpath中)。
建立測試目錄JunitTest
把java文件,統一放到JunitTest/src目錄,根據package建與之相關的目錄.
文件1:
HelloWorld.java
package com.company;
public class HelloWorld {
public String sayHello() {
return "Hello World!";
}
public static void main( String[] args ) {
HelloWorld world = new HelloWorld();
System.out.println(world.sayHello());
}
}
文件2:
AllJunitTests.java
package test.com.company;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class AllJunitTests extends TestCase{
public AllJunitTests(String name){
super(name);
}
public static Test suite(){
TestSuite suite = new TestSuite();
//TestSuite suite = new TestSuite();
suite.addTestSuite(HelloWorldTest.class);
return suite;
}
}
文件3:
HelloWorldTest.java
package test.com.company;
import com.company.HelloWorld;
import junit.framework.TestCase;
import junit.framework.AssertionFailedError;
import junit.framework.Assert;
/**
* JUnit 3.8.1 testcases for HelloWorld
*/
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 com.company.HelloWorld();
assertEquals("Hello World!", world.sayHello() );
}
}
我的build.xml放到JunitTestuild,構造這個文件才可以使用ant命令來執行,包括編譯、打包、測試junit用例
<?xml version="1.0" encoding="UTF-8" ?>
<project name="anita" default="main" basedir="../">
<property name="app.name" value="sayhello" />
<property name="build.dir" value="build/classes" />
<target name="JUNIT">
<available property="junit.present" classname="junit.framework.TestCase" />
</target>
<target name="compile" depends="JUNIT">
<mkdir dir="${build.dir}"/>
<javac srcdir="src/" destdir="${build.dir}" >
<include name="**/*.java"/>
</javac>
</target>
<target name="jar" depends="compile">
<mkdir dir="build/lib"/>
<jar jarfile="build/lib/${app.name}.jar"
basedir="${build.dir}" includes="com/**"/>
</target>
<target name="compiletests" depends="jar">
<mkdir dir="build/testcases"/>
<javac srcdir="src/test" destdir="build/testcases">
<classpath>
<pathelement location="build/lib/${app.name}.jar" />
<pathelement path="" />
</classpath>
<include name="**/*.java"/>
</javac>
</target>
<target name="runtests" depends="compiletests" if="junit.present">
<java fork="yes" classname="junit.textui.TestRunner"
taskname="junit" failonerror="true">
<arg value="test.com.company.AllJunitTests"/>
<classpath>
<pathelement location="build/lib/${app.name}.jar" />
<pathelement location="build/testcases" />
<pathelement path="" />
<pathelement path="${java.class.path}" />
</classpath>
</java>
</target>
</project>
如果是win系統,在DOS窗口下進入你的工作目錄,并到 ../JunitTest/build下,執行ant runtests命令,會看到如下信息
D:TEMPJunitTestTestCaseuild>ant runtests
Buildfile: build.xml
JUNIT:
compile:
[mkdir] Created dir: D:TEMPJunitTestTestCaseuildclasses
[javac] Compiling 3 source files to D:TEMPJunitTestTestCaseuildclasses
jar:
[mkdir] Created dir: D:TEMPJunitTestTestCaseuildlib
[jar] Building jar: D:TEMPJunitTestTestCaseuildlibsayhello.jar
compiletests:
[mkdir] Created dir: D:TEMPJunitTestTestCaseuild estcases
[javac] Compiling 2 source files to D:TEMPJunitTestTestCaseuild estcas
es
runtests:
[junit] .
[junit] Time: 0
[junit] OK (1 test)
BUILD SUCCESSFUL
Total time: 7 seconds
<中間休息^_^>
下面請把 com/company/HelloWorld.java文件中的return "Hello World!";改成return "Hello world!!",并在../JunitTest/builde目錄運行下運行ant runtests。
我們會看到如下情形:
……………………………………
……………………………………
runtests:
[junit] .F
[junit] Time: 0.01
[junit] There was 1 failure:
[junit] 1) testSayHello(test.com.company.HelloWorldTest)junit.framework.Comp
arisonFailure: expected:<...World...> but was:<...world!...>
[junit] at test.com.company.HelloWorldTest.testSayHello(Unknown Source)
[junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces
sorImpl.java:39)
[junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet
hodAccessorImpl.java:25)
[junit] FAILURES!!!
[junit] Tests run: 1, Failures: 1, Errors: 0
BUILD FAILED
我們可以看到,這是JUNIT測試用例未正常運行通過的錯誤信息。