2013-04-05 26 views
2
from __future__ import with_statement 
from sikuli.Sikuli import * 

import os 
import unittest 
import this 
import xmlrpclib 
import SimpleXMLRPCServer, SocketServer, threading 

class SimpleThreadedXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer): 
    pass 

class ABC(object): 
    def A(self): 
     ........... 
    def B(self): 
     ........... 
    def C(self): 
     ...........  


class XYZ(unittest.TestCase,ABC): 
    def setUp(self): 
     print "Inside setup" 
     pass  
    def tearDown(self): 
     print "Inside tearDown" 
     pass 
    def test_1(self): 
     self.A() 
     self.B() 
     self.C() 


    def D(self):  
     print "Inside D" 
     return True  


suite = unittest.TestLoader().loadTestsFromTestCase(XYZ) 

class ServerThread(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.server = SimpleThreadedXMLRPCServer(("x.x.x.1", 8000)) 
     #self.server.register_instance() #How to Register an instance of XYZ here. 
    def run(self): 
     self.server.serve_forever() 

server = ServerThread() 
server.start() 

註冊一個類的實例所以我的問題是,如何在這裏註冊的XYZ一個實例。在註釋行的上方,使得它可以從客戶端XMLRPC喜歡被稱爲:如何創建單元測試在Python中繼承的類的實例,這樣我就可以在simpleXMLRPCServer

client = xmlrpclib.ServerProxy("http://x.x.x.2:8000") 
handraise = client.D() #Or any other possible way 

我知道它的工作原理與register_function(D)但我希望全班XYZ使用register_instance()被曝光。

回答

0

理論上這應該工作:

self.server.register_instance(XYZ()) # but it throwed some runTest Error for me 

不管怎麼說,明確地傳遞方法的名稱作爲ARG在類名裏面register_instance像:

self.server.register_instance(XYZ("D")) 

預期一樣對我。
並從xmlrpc客戶端調用D(),如:

handraise = client.D()