JUnit
測试的重要性毋庸质疑。但怎样使測试更加准确和全面。而且独立于项目之外而且避免硬编码,JUnit给了我们一个非常好的解决方式。
能够说JUnit是为单元測试而生的,一个Java语言的单元測试框架。当然,和JUnit类似的。其它语言的单元測试框架还有:CppUnit、NUnit等,差点儿全部的单元測试工具XUnit都是按照JUnit来写的。
一、JUnit的命名规则和习惯
1、假设有一个名为ClassA的被測试函数,那么測试类的名称就是TestClassA
2、假设有一个名为methodA的被測试函数。那么測试函数的名称就是testMethodA
演示样例
首先如果有一个项目类Classs例如以下:
public class Classs { Studentstudent=null; //返回学生集合 publicList<Student> QueryStudent(){ List<Student>lsts=new ArrayList<Student>(); returnlsts; } publicStudent QueryOne(){ returnstudent; } }
当中定义了一个QueryStudent方法返回一个集合;QueryOne的方法返回一个对象。好。如今我们要对方法进行測试。
public final voidtestQueryStudent() { ClasssmyClass=new Classs(); assertNotNull(myClass.QueryStudent()); } publicfinal void testQueryOne() { ClasssmyClass=new Classs(); assertNotNull(myClass.QueryOne()); }
这种方法在JUnit框架中称之为一个断言,JUnit提供给我们了非常多断言,比方assertEqual,assertTrue...,我们能够利用这些断言来推断两个值是否相等或者二元条件是否为真等问题。
然后我们能够执行JUnit来检測我们的測试结果,这样我们在不影响Project文件的前提下,实现了对Project单元的測试。
在JUnit框架下,他会自己主动执行全部以test..开头的測试方法(利用java的反射机制),怎样自己定义那些方法执行?一种方法我们能够改变測试方法的名称,不用test开头就可以。这样測试框架就会忽略它。另外一种方法我们能够自己手工组合我们须要的測试集合,我们能够通过创建test suite来取得,不论什么測试类都可以包括一个名为suite的静态方法:
TestStudent类:
public class TestStudentextends TestCase { public TestStudent(String string) { super(string); } protectedvoid setUp() throws Exception { super.setUp(); } publicfinal void testQueryOneClass() { Studentstudent=new Student(); assertNotNull(student.QueryOneClass()); } publicfinal void testQueryClasss() { Studentstudent=new Student(); assertNotNull(student.QueryClasss()); } public static Test suite(){ TestSuite suite = new TestSuite(); suite.addTest(newTestStudent("testQueryOneClass")); return suite; } }
我们通过suite显式的说明了我们要执行哪些test方法,并且,通过给构造函数的String參数传值:让TestCase返回一个对命名測试方法的引用。
假设要測试两个类里的測试方法,我们能够再写一个类。写suite方法,选择行測试几个类中的方法。
TestComposite类:
public classTestComposite extends TestCase { public TestComposite(String string) { super(string); } static public Test suite(){ TestSuite suite = new TestSuite(); suite.addTestSuite(TestClasss.class); suite.addTest(TestStudent.suite()); return suite; } }
这个类会执行TestStudent类中的suite方法指定执行的測试方法,还会执行TestClasss类中存在的符合命名规范的方法。
总结
JUnit给我们提供了非常多方便的服务,比如:假设測试方法。每个都须要数据库连接。那么我们岂不是要在代码里写非常多遍?不用操心。JUnit给我们提供了能起到总控的方式。我们须要针对suite做一个setUp和tearDown,须要提供所需的一个suite(不管通过什么样的方法)而且把它包装进一个TestSetup对象,和动态代理的思想非常类似。有兴趣的能够自己查一下,实现起来非常easy。
版权声明:本文博主原创文章。博客,未经同意不得转载。