[wingide-users] RE: global setUp script for unit testing? (and
other unittest features)
Warren, Russell
russell.warren at newport.com
Sun Feb 24 13:37:23 MST 2008
> I think nose can do things like this (certainly with a plugin).
>
> Unfortunately, Wing doesn't support nose's test discovery, etc., so it means
> running your tests outside the IDE.
Never heard of nose... I'll have to check it out. The nose free unittest on its own has no problem doing what I want. It is purely the Wing IDE integration I'm struggling with.
In the mean time, python being python I've managed to kluge together a makeshift solution that helps me part way at least... basically I subclass the TestCase and always use that for the zillion test cases in my project. In the subclass I detect if Wing is in use (conveniently in sys.argv[0]) and do some onetime setup in that case.
My subclass code is below (can't recall if it's going to get wrap-mangled). It is not standalone, but the idea is there. It has me using the IDE unittest integration again but I wouldn't want to have to do this every time, or keep growing this hack! Allowing setup of before/after scripts in the IDE would be muuuuch better. And, now that I'm using the IDE again, my hatred for the default exploded treeview is rising dangerously... can't think of a hack fix for that at the moment!
Russ
---
class BaseUnitTest(unittest.TestCase):
ServerProxy = None # for all derived classes to use
BaseSetupComplete = False
SetupLock = threading.Lock() #in case test cases are ever run on a thread each
ServerInstance = None
ServerThread = None
def setUp(self):
BaseUnitTest.SetupLock.acquire() # in case unit tests are run in threads
try:
if not BaseUnitTest.BaseSetupComplete: #don't want to do this every bleeding time!
print "** INITIALIZING BASE UNIT TEST **"
cp = ConfigParser.ConfigParser()
cp.read("ut_config.ini")
rpcServerURL = cp.get("ServerConfig", "ServerURL")
BaseUnitTest.ServerProxy = RpcServerProxy(rpcServerURL)
sp = BaseUnitTest.ServerProxy = RpcServerProxy(rpcServerURL)
#if running as unittests from Wing, we may need to launch the server...
if "wing" in sys.argv[0]: #we are running from Wing
print "** RUNNING FROM WING IDE **"
import socket
#from pprint import pprint as pp
#pp(globals())
#if the server is running, do nothing. If not, start one up.
try:
sp.Utility.Ping()
print "** SERVER DETECTED **"
except socket.error:
print "** NO SERVER DETECTED - STARTING ONE UP **"
import RpcServer
#launch server, keeping an instance of it to keep it alive and
#send it the rpc search path using __file__ to figure out where
#the heck it is
(BaseUnitTest.ServerInstance, BaseUnitTest.ServerThread) = \
RpcServer.LaunchServerOnThread(os.path.split(__file__)[0])
#endif - Wing unit test detection
BaseUnitTest.BaseSetupComplete = True
finally:
BaseUnitTest.SetupLock.release()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: /pipermail/wingide-users/attachments/20080224/d642ad00/attachment.html
More information about the wingide-users
mailing list