上篇示范了在main方法中进行单元测试,还讨论了这种测试的一些缺点。为了克服main方法进行单元测试的缺点,本篇将讨论使用一个简单的类进行单元测试的过程。透过这个类你可以看到单元测试框架的雏形。
下面的类还是对CoolClass的reverseString方法进行测试,请看如下代码:
/************************************************************
* 项目名称:lhjTest
* 文件名称:CoolClassTest.java
* 文件描述:CoolClassTest.java
* 作者:Administrator
* 创建日期:2007-3-24
* 修改记录:
***********************************************************/
package org.lhj.cool.junit.test;
import org.lhj.cool.junit.CoolClass;
/**
* @author Administrator
*/
public class CoolClassTest
{
private CoolClass testClass;
/**
* set up the environment
*/
public void setUp()
{
testClass = new CoolClass();
}
/**
* tear down the environment
*/
public void tearDown()
{
testClass = null;
}
/**
* test the null param
*/
public void testNullParamForReverseString()
{
try
{
testClass.reverseString(null);
System.out.println("Error:expect throw nullPointerExceptioin but not.");
}
catch (NullPointerException e)
{
System.out.println("Succeed:test the null param for reverseString succeed.");
}
}
/**
* test the "" param
*/
public void testEmptyStringForReverseString()
{
if (!(null == testClass.reverseString("")))
{
System.out.println("Error:expect return the null value but not.");
}
else
{
System.out.println("Succeed:test the "" param for reverseString succeed.");
}
}
/**
* test the simple param
*/
public void testSimpleParamForReverseString()
{
//test the "aaAA" param
if (!"AAaa".equals(testClass.reverseString("aaAA")))
{
System.out.println("Error:expect return AAaa but not.");
}
else
{
System.out.println("Succeed:test the aaAA param for reverseString succeed.");
}
//test the "AAaa" param
if (!"aaAA".equals(testClass.reverseString("AAaa")))
{
System.out.println("Error:expect return aaAA but not");
}
else
{
System.out.println("Succeed:test the AAaa param for reverseString succeed.");
}
//the other tests...
}
/**
* this method is for test
* @param args
*/
public static void main(String[] args)
{
CoolClassTest testCase = new CoolClassTest();
testCase.setUp();
testCase.testNullParamForReverseString();
testCase.testEmptyStringForReverseString();
testCase.testSimpleParamForReverseString();
testCase.tearDown();
}
}
* 项目名称:lhjTest
* 文件名称:CoolClassTest.java
* 文件描述:CoolClassTest.java
* 作者:Administrator
* 创建日期:2007-3-24
* 修改记录:
***********************************************************/
package org.lhj.cool.junit.test;
import org.lhj.cool.junit.CoolClass;
/**
* @author Administrator
*/
public class CoolClassTest
{
private CoolClass testClass;
/**
* set up the environment
*/
public void setUp()
{
testClass = new CoolClass();
}
/**
* tear down the environment
*/
public void tearDown()
{
testClass = null;
}
/**
* test the null param
*/
public void testNullParamForReverseString()
{
try
{
testClass.reverseString(null);
System.out.println("Error:expect throw nullPointerExceptioin but not.");
}
catch (NullPointerException e)
{
System.out.println("Succeed:test the null param for reverseString succeed.");
}
}
/**
* test the "" param
*/
public void testEmptyStringForReverseString()
{
if (!(null == testClass.reverseString("")))
{
System.out.println("Error:expect return the null value but not.");
}
else
{
System.out.println("Succeed:test the "" param for reverseString succeed.");
}
}
/**
* test the simple param
*/
public void testSimpleParamForReverseString()
{
//test the "aaAA" param
if (!"AAaa".equals(testClass.reverseString("aaAA")))
{
System.out.println("Error:expect return AAaa but not.");
}
else
{
System.out.println("Succeed:test the aaAA param for reverseString succeed.");
}
//test the "AAaa" param
if (!"aaAA".equals(testClass.reverseString("AAaa")))
{
System.out.println("Error:expect return aaAA but not");
}
else
{
System.out.println("Succeed:test the AAaa param for reverseString succeed.");
}
//the other tests...
}
/**
* this method is for test
* @param args
*/
public static void main(String[] args)
{
CoolClassTest testCase = new CoolClassTest();
testCase.setUp();
testCase.testNullParamForReverseString();
testCase.testEmptyStringForReverseString();
testCase.testSimpleParamForReverseString();
testCase.tearDown();
}
}
在Eclipse的java编辑器里右键>run as> java application即可运行本测试类。
在main方法里我们可以看到运行的过程:先setUp环境,然后test测试的方法,最后tearDown环境。
这就是使用测试类的好处。 可以看出,main方法显得精简了很多,环境设置、测试方法都放到main外面成为单独的方法,各个测试也独立开来不影响其他的测试方法。
但是随着测试类的增多,你会发现存在如下问题:
1、每个类都要写个main方法,显得比较麻烦。
2、使用System.out.println使得测试比较笨,需要找更加简洁的方法来代替。
3、还是无法进行自动化测试(批量运行main也行,但是性能方面肯定有问题)。
以上的问题就是框架要出现的原因,使用框架可以避免重复劳动,提高效率。下一篇将介绍单元测试框架的一个例子。