躺在沙灘上的小豬

          快樂的每一天

          #

          PyDev 0.9.8.2 released

          PyDev - Python IDE (Python Development Enviroment for Eclipse) version 0.9.8.2 has been released.

          Check the homepage (http://pydev.sourceforge.net/) for more details. 

          Download
          -----------------------------------------------------
          Current release: 0.9.8.2.

          1. Use the Eclipse update manager: http://pydev.sf.net/updates/
          2. Get zip from SourceForge :http://www.sourceforge.net/projects/pydev/

          Requirements:
          -----------------------------------------------------

          1. Eclipse 3.1 (the SDK is required)
          2. Python 2.3.x or 2.4.x
          3. Java 1.4 or higher

          Instructions:
          -----------------------------------------------------
          Fast install: just go to the update manager (inside the help menu) and add update site: http://pydev.sf.net/updates/ (eclipse should do the rest)
          An alternative is just getting the zip file and extracting it yourself in eclipse.
          If you choose to do it, just make sure the plugins folder is extracted on top of the eclipse plugins folder.

          Important:
          -----------------------------------------------------
          If you have version 0.9.6 or earlier installed, you must remove it and all previous versions
          before installing the latest version.

          posted @ 2005-09-27 10:53 martin xus| 編輯 收藏

          ww2之旅全面開始.

          一直沒有什么機(jī)會(huì)采用ww2去做項(xiàng)目,都是在用struts,正好下周有個(gè)項(xiàng)目,準(zhǔn)備采用webwork/xwork,放棄struts.同時(shí)也開始我的ww2之旅.

          I like it o_o

          posted @ 2005-09-25 20:48 martin xus| 編輯 收藏

          自由的python 二

          將上面的代碼重構(gòu)了一下,并且添加了cookies,這樣我們就不需要每次登陸了

            1#!/usr/bin/python
            2# -*- coding: UTF-8 -*-
            3
            4import urllib
            5import cookielib, urllib2
            6import os
            7import re
            8
            9class Fun:
           10    def __init__(self,username,password,times=1,\                  dataFileName='fun.data',loginurl='',posturl='',\                  proxies={},pform=None,cookies=None):
           11        print '初始化'
           12        self.username=username
           13        self.password=password
           14        self.times = times
           15        self.loginurl=loginurl
           16        self.posturl = posturl
           17        self.proxies=proxies
           18        self.pform=pform        
           19        self.dataFileName=dataFileName
           20        self.cookies=cookielib.CookieJar()
           21        self.opener=None
           22    
           23    def login(self):    
           24        """
           25            登陸
           26        """        
           27        print '登陸'
           28        loginparams = urllib.urlencode({'j_username':self.username,\                                                'j_password':self.password,\
           29                                                                            'UPC_REQUEST_URI':'*.do',\                                                'UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG'}) 
           30        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
           31                        
           32        self.pform = self.opener.open(self.loginurl,loginparams)
           33        print '登陸成功'
           34                        
           35    def post(self):
           36        """
           37            解析登陸完成的HTML頁(yè)面,獲取用戶相應(yīng)的信息
           38        """    
           39        print '解析html頁(yè)面,獲取服務(wù)器端返回的內(nèi)容'
           40        content = '\n'.join(self.pform.readlines())            
           41        items = ["employeeName","department","workArea","workCity","fillInDate"]
           42        values = []
           43        for item in items:
           44            pattern = "name=\""+item+"\"\s*(size=\"\d*\")?\s*\                                    value=\"(\S*(\s*\S*)?)\"\s*id=\""+item+"\""
           45            matcher = re.search(pattern,content)
           46            
           47            if matcher!=None:        
           48                values.append(matcher.groups()[1])
           49                print values
           50            else:
           51                values.append('')
           52        print '解析完成'                
           53        """
           54            提交日?qǐng)?bào)
           55        """        
           56                
           57        print '讀取data文件:'+self.dataFileName
           58        f = open(self.dataFileName)
           59        contents = f.readlines()
           60        
           61        #讀取data文件,判斷是否采用交互界面,還是采用data文件的數(shù)據(jù)    
           62        
           63        if contents[0]=='n':                    
           64            c = raw_input('是否采用提交當(dāng)天日志(y/n)?:')
           65            if c=='n':
           66                self.fillInDate = raw_input('請(qǐng)輸入提交日期(格式y(tǒng)yyy-mm-dd):')        
           67            projectId = raw_input('項(xiàng)目名稱代碼:')
           68            workId = raw_input('具體事項(xiàng):')
           69            workContent = raw_input('工作內(nèi)容:')
           70            workNum = raw_input('正常工作時(shí)長(zhǎng):')
           71            overtimeNum = raw_input('加班工作時(shí)長(zhǎng):')
           72        else:
           73            
           74            #是否采用文件中的時(shí)間,如果不采用,則采用當(dāng)前時(shí)間
           75            if contents[1]=='y':                
           76                self.fillInDate = contents[2]
           77            
           78            projectId = contents[3]
           79            workId = contents[4]
           80            workContent = contents[5]
           81            workNum = contents[6]
           82            overtimeNum = contents[7]
           83        
           84        #拼湊參數(shù)     o_o
           85        paramsmap = {'employeeId':self.username,\                         'employeeName':values[0],\
           86             'department':values[1],\             'workArea':values[2],\             'workCity':values[3],\             'fillInDate':values[4],\
           87             'detailList.projectId':[projectId],\             'detailList.workId':[workId],\
           88             'detailList.workContent':[workContent],\             'detailList.workNum':[0],             'detailList.overtimeNum':[8]}
           89        
           90        keys = paramsmap.keys()
           91        for key in keys:
           92            print key,':',paramsmap[key]
           93        
           94        postparams = urllib.urlencode(paramsmap)
           95        print    'postparams:'+postparams    
           96        #提交
           97        #opener = urllib2.build_opener(self.cookies)       
           98        print '開始提交日?qǐng)?bào)'
           99        result = self.opener.open(self.posturl,postparams)
          100        #result = urllib2.urlopen(posturl,postparams)
          101        #todo:解析提過完成頁(yè)面,獲取信息
          102        #        
          103        result.close()
          104        print '日?qǐng)?bào)填寫成功'
          105        
          106    def close(self):
          107        """
          108        """
          109        if not self.pform:
          110            self.pform.close()
          111        
          112
          113
          114if __name__=='__main__':    
          115    #測(cè)試一下
          116    try:
          117        test = Fun(username='',password='',loginurl='',posturl = '')
          118        test.login()
          119        test.post()
          120        test.close()
          121    except IOError:        
          122        raise


          初始化
          登陸...
          登陸成功
          解析html頁(yè)面,獲取服務(wù)器端返回的內(nèi)容
          ['\xd0\xec\xcf\xe9\xbe\xfc']
          ['\xd0\xec\xcf\xe9\xbe\xfc', '\xc4\xcf\xbe\xa9']
          ['\xd0\xec\xcf\xe9\xbe\xfc', '\xc4\xcf\xbe\xa9', '\xbb\xaa\xb6\xab']
          ['\xd0\xec\xcf\xe9\xbe\xfc', '\xc4\xcf\xbe\xa9', '\xbb\xaa\xb6\xab', '\xc4\xcf\x
          be\xa9']
          ['\xd0\xec\xcf\xe9\xbe\xfc', '\xc4\xcf\xbe\xa9', '\xbb\xaa\xb6\xab', '\xc4\xcf\x
          be\xa9', '2005-09-24 17:45:40.0']
          解析完成
          讀取data文件:fun.data
          detailList.workId : ['10003102\n']
          employeeId : 404
          workCity : 南京
          detailList.projectId : ['JX0001\n']
          detailList.overtimeNum : [8]
          detailList.workNum : [0]
          detailList.workContent : ['\xbb\xfc\xb2\xe9\xd0\xe8\xc7\xf3\xb7\xd6\xce\xf6\n']
          fillInDate : 2005-09-24 17:45:40.0
          department : 南京
          workArea : 華東
          employeeName : 徐祥軍
          postparams:detailList.workId=%5B%2710003102%5Cn%27%5D&employeeId=404&workCity=%C
          4%CF%BE%A9&detailList.projectId=%5B%27JX0001%5Cn%27%5D&detailList.overtimeNum=%5
          B8%5D&detailList.workNum=%5B0%5D&detailList.workContent=%5B%27%5Cxbb%5Cxfc%5Cxb2
          %5Cxe9%5Cxd0%5Cxe8%5Cxc7%5Cxf3%5Cxb7%5Cxd6%5Cxce%5Cxf6%5Cn%27%5D&fillInDate=2005
          -09-24+17%3A45%3A40.0&department=%C4%CF%BE%A9&workArea=%BB%AA%B6%AB&employeeName
          =%D0%EC%CF%E9%BE%FC
          開始提交日?qǐng)?bào)
          日?qǐng)?bào)填寫成功

          posted @ 2005-09-24 18:22 martin xus| 編輯 收藏

          自由的python o_o

               摘要: 問題:       公司的日?qǐng)?bào),每天填寫的時(shí)候總是那么巨慢,都有點(diǎn)恐懼它了! 解決方案:       讓代碼幫我們每天定時(shí)提交,這樣就可以省下精力取吹牛去了 好了,開始吧:       有兩種思路,大概的描述一下如下...  閱讀全文

          posted @ 2005-09-24 14:32 martin xus| 編輯 收藏

          jmock!

          在上面篇文章,我們的測(cè)試代碼如下:

           1package com.martin.pdo;
           2
           3import org.springframework.context.ApplicationContext;
           4
           5import junit.framework.Assert;
           6import junit.framework.TestCase;
           7
           8public class UserTest extends TestCase {
           9
          10    public void testUser() {
          11        ApplicationContext context = JUnitTestHelper.getContext();
          12        User user = (User) context.getBean("user");
          13                User _u1 = new User();
          14        _u1.setName("martin xus");
          15        _u1.setSex('F');
          16        _u1.setAge(100);
          17        user.add(_u1);
          18
          19        Assert.assertNotNull(_u1.getId());
          20
          21        User _u2 = (User) user.loadByName("martin xus").get(0);
          22        Assert.assertEquals(_u1.getId(), _u2.getId());
          23
          24        user.remove(_u2);
          25        Assert.assertTrue(user.loadByName("martin xus").size() == 0);
          26    }

          27
          28}

          29


          而這些,必須要和spring&hibernate一起工作,必須保證數(shù)據(jù)庫(kù)操作正確,而我們需要的只是測(cè)試這個(gè)類的本身!
          有必要連hibernate,spring一起測(cè)試嗎?當(dāng)然沒有,測(cè)試,只需要保證本代碼完成相應(yīng)的功能,即可.

          那么就有必要更換測(cè)試方法:
          mock便是首選,在這里我們選擇了jmock (http://www.jmock.org)

           1package com.martin.mock;
           2
           3import org.jmock.Mock;
           4import org.jmock.MockObjectTestCase;
           5
           6import java.util.List;
           7
           8/**
           9 * @author martin.xus
          10 */

          11public class UserTest extends MockObjectTestCase {
          12
          13    public void testAdd() {
          14        Mock mock = mock(UserManager.class);
          15        User user = new User();
          16        mock.expects(once()).method("add").with(isA(User.class));
          17        UserManager manager = (UserManager) mock.proxy();
          18
          19        user.setManager(manager);
          20        user.add(new User());
          21        mock.verify();
          22    }

          23
          24    public void testLoadByName() {
          25        Mock mock = mock(UserManager.class);
          26        User user = new User();
          27
          28        mock.expects(once()).method("loadByName").with(isA(String.class)).will(returnValue(List.class));
          29        UserManager manager = (UserManager) mock.proxy();
          30
          31        user.setManager(manager);
          32        user.loadByName("martin");
          33        mock.verify();
          34    }

          35
          36    public void testRemove(){
          37        Mock mock = mock(UserManager.class);
          38        User user = new User();
          39
          40        mock.expects(once()).method("remove").with(isA(User.class));
          41        UserManager manager = (UserManager) mock.proxy();
          42
          43        user.setManager(manager);
          44        user.remove(user);
          45        mock.verify();   
          46    }

          47}

          ok,測(cè)試通過

          posted @ 2005-09-22 21:18 martin xus| 編輯 收藏

          僅列出標(biāo)題
          共28頁(yè): First 上一頁(yè) 20 21 22 23 24 25 26 27 28 下一頁(yè) 
          主站蜘蛛池模板: 定南县| 兴和县| 梁河县| 武宁县| 黑河市| 威信县| 博兴县| 宿松县| 昌都县| 天津市| 渑池县| 中宁县| 吴桥县| 屏东市| 昌都县| 江北区| 岳阳县| 含山县| 大洼县| 金乡县| 宁阳县| 宁津县| 慈利县| 汉沽区| 红河县| 烟台市| 宁陵县| 曲阜市| 吴忠市| 遂平县| 曲松县| 夏津县| 会东县| 德令哈市| 钟祥市| 壤塘县| 唐海县| 吴桥县| 连云港市| 漳平市| 桐庐县|