Topic: JUnitX快速上手指南 |
Print this page |
1.JUnitX快速上手指南 | Copy to clipboard |
Posted by: fjchenq Posted on: 2003-03-20 13:17 JUnitX顾名思义就知道是一个JUnit的扩展包,JUnit在使用上的主要局限是只能测试那些public的方法和成员变量。JUnitX的出现动机就是提供测试私有和保护 方法的单元测试工具,它建立在JUnit之上,其关键类junitx.framework.PrivateUseCase继承了JUnit.framework.TestCase,所以JUnit提供的TestRunner可以直接运行基于PrivateUseCase的测试类。 PrivateUseCase的使用和UseCase类的使用区别还是比较大的,由于要测试private和protected方法,就需要绕过Java的访问限制,JUnitX利用了Reflection机制完成这一点,也因此使得基于PrivateUseCase的测试代码显得比较“怪异”,下面介绍一个简化的使用步骤: 1. 把junitx.jar存入合适目录,并加入classpath,如果用 IDE工具运行testrunnr,也要在IDE里设。 2. 在你要测试的类mypackage.MyClass所属的包中增加一个类 mypackage.TestProxy,代码如下:道理以后解释。 // //TestProxy.java // import junitx.framework.TestAccessException; public class TestProxy extends junitx.framework.TestProxy { public Object newInstance (Object[] anArgList) throws TestAccessException { try { return getProxiedClass ().getConstructor (anArgList). newInstance (anArgList); } catch (Exception e) { throw new TestAccessException ("could not instantiate " + getTestedClassName (), e); } } public Object newInstanceWithKey (String aConstructorKey, Object[] anArgList) throws TestAccessException { try { return getProxiedClass ().getConstructor (aConstructorKey). newInstance (anArgList); } catch (Exception e) { throw new TestAccessException ("could not instantiate " + getTestedClassName (), e); } } } //这个类其实就是为PrivateUseCase访问私有方法充作Proxy 3. 然后就可以写能访问私有方法的测试类了,记住继承PrivateUseCase 例如: public class TestTableTreeExtractor extends PrivateTestCase { public TestTableTreeExtractor(String s) { super; } public void testInitTags() throws TestAccessException { Object obj = newInstance("aies.TableTreeExtractor",NOARGS); invoke(obj,"initTags",NOARGS); Vector s = (Vector)get(obj, "tableTags"); assertNotNull; assertEquals(4,s.size()); } } 解释一下,使用newInstance方法得到对象实例,使用invoke调用对象的私有方法,使用get得到对象的私有属性,NOARGS是Object[]类型的一个常量。 恩,照着这个例子,就应该可以自己写JUnitX的测试用例了,呵呵。下次有空再解释它的工作机制罢,其实感兴趣的down源码下来看看,对reflection机制会有很好的理解。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |