快速业务通道

用Jython构建JUnit测试包 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
个用 Phthon 脚本动态生成 TestSuite 的 JUnit 测试装具模块,后者是一个搜索匹配特定样式的文件的 Python 脚本。DynamicTestSuite.java 使用 getalltests.py 构建 TestSuite 。可以修改 getalltests.py 以更好地适合自己的项目的需要.

了解测试装具模块

代码是如何工作的?首先,指派 getalltests.py 获取一组要执行的 Test 类。然后,使用 Jython API 将这个列表从 Python 运行时环境中提取出来。然后使用 Java Reflection API 构建在表示 Test 类名的列表中的 String 对象的类实例。最后,用 JUnit API 将 Test 添加到 TestSuite 中。这四个库的相互配合可以实现您的目标:动态构建的 TestSuite 可以像静态定义的那样运行。

看一下清单 2 中的 JUnit suite 清单。它是一个公开 public static TestSuite suite() 方法签名的 TestCase 。由 JUnit 框架调用的 suite() 方法调用 getTestSuite() , getTestSuite() 又调用 getClassNamesViaJython() 以获取一组 String 对象,其中每一个对象表示一个作为包的一部分的 TestCase 类。

用Jython构建JUnit测试包(2)

时间:2011-02-04 Michael Nadel

清单 2. 动态定义 TestSuite

/** * @return TestSuite A test suite containing all our tests (as found by Python script) */ private TestSuite getTestSuite() {    TestSuite suite = new TestSuite();    // get Iterator to class names we''re going to add to our Suite    Iterator testClassNames = getClassNamesViaJython().iterator();    while( testClassNames.hasNext() ) {      String classname = testClassNames.next().toString();      try {        // construct a Class object given the test case class name        Class testClass = Class.forName( classname );        // add to our suite        suite.addTestSuite( testClass );        System.out.println( "Added: " + classname );      }      catch( ClassNotFoundException e ) {        StringBuffer warning = new StringBuffer();        warning.append( "Warning: Class ''" ).append( classname ).append( "'' not found." );        System.out.println( warning.toString() );      }    }    return suite; }

在开始时,要保证设置了正确的系统属性。在内部,Jython 将使用 python.home 属性来定位它所需要的文件。最终会调用 getClassNamesViaJython() 方法,在这里面会有一些奇妙的事情发生,如在清单 3 中将会看到的。

清单 3. 从 Python 运行时提取 Java 对象

/** * Get list of tests we''re going to add to our suite * @return List A List of String objects, each representing class name of a TestCase */ private List getClassNamesViaJython() {    // run python script    interpreter.execfile( getPathToScript() );    // extract out Python object named PYTHON_OBJECT_NAME    PyObject allTestsAsPythonObject = interpreter.get( PYTHON_OBJECT_NAME );    // convert the Python object to a String[]    String[] allTests = (String[]) allTestsAsPythonObject.__tojava__( String[].class );    // add all elements of array to a List    List testList = new ArrayList();    testList.addAll( Arrays.asList( allTests ) );    return testList; }

首先,对 Python 文件进行判断。然后,从 Python 运行时提取出一个 PyObject 。这就是得到的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号