用Jython对Java做单元测试,当然是为了测试公司开发的java代码,这样就涉及到导入第三包的问题,怎么导入第三方包? 可以利用http://blog.csdn.net/powerccna/article/details/37739207 这里的实现的函数,扫描指定目录下的jar包,然后通过sys.path.append()函数加入到jython的sys.path里面。
for jar_file in scan_files("/home/jim/java_jar",postfix=".jar"): sys.path.append(jar_file)
import 第三方包,必须先append进来后才可以import,要不然会报找不到包。有些人在使用过程中说有要同时加入到CLASSPATH里面,我使用的时候,只是mysql driver这个jar包需要加入到CLASSPATH里面,其他的直接加入到sys.path里面就可以用了。
注意这里from org.apache.commons.net.ftp import FTPClient, 还是和cpython有点不一样的,FTPClient在这里是个文件,对应Cpython里面叫着一个模块,在Cpython里面要初始化FTPClient这个类,应该是ftp=FTPClient.FTPClient(), 因为FTPClient.FTPClient才是真正的类,但这里是ftp=FTPClient(),Jython是java实现的,遵守java的规则多点吧。
#!/usr/bin/env jython #coding=utf-8 import sys import os import java import unittest import time #scan_files是在另外一个地方实现的函数,这里删除了函数的实现方法,是为了大家看单元测试这块清晰 for jar_file in scan_files("/home/jim/java_jar",postfix=".jar"): sys.path.append(jar_file) #print sys.path from com.mysql.jdbc import Driver import java.sql.Connection from java.sql import DriverManager import org.apache.commons.net.ftp.FTP; from org.apache.commons.net.ftp import FTPClient import org.apache.commons.net.ftp.FTPReply def mysql_driver_test(): java.lang.Class.forName('com.mysql.jdbc.Driver') conn = DriverManager.getConnection("jdbc:mysql://192.168.19.21:3306/mysql","root","root"); class FTPClientTest(unittest.TestCase): def setUp(self): self.start_time=time.time() print "starting\n", def test_login(self): ftp=FTPClient() ftp.connect("192.168.23.117") ftp.login("root","root") self.assertEquals(ftp.getReplyCode(),230) def test_files_list(self): #这里之所以重新登录ftp服务器,不重用前面case的结果,就是为了保持各个case的独立性,确保不会 #因为前面case的原因影响后继的测试 file_existing=False ftp=FTPClient() ftp.connect("192.168.23.117") ftp.login("root","root") if ftp.getReplyCode()==230: files = ftp.listNames("/export/home/test") for fi in files: if "python-2.5-sol10-x86-local.gz" in fi: file_existing=True break self.assertEquals(file_existing,True) def tearDown(self): print "cost", time.time()-self.start_time," second" print "end" if __name__=="__main__": unittest.main()运行结果:
[root@host-192-168-53-21 jythontest]# jython importjar.py
starting
cost 0.157999992371 second
end
.starting
cost 0.0529999732971 second
end
----------------------------------------------------------------------
Ran 2 tests in 0.215s
OK