Hello tutors I've constructed an example which shows a problem I'm having testing a real world program and would like to run it past you.
tutor_question.py -------------------------------------- # -*- coding: utf-8 -*- import sys import threading import time class Time_Printer(threading.Thread): def run(self): for i in range(60): print('%s - %s' % (self, time.ctime(time.time()))) time.sleep(1) class Infinite_Loop_Tutor_Question(object): def start_A(self): thread = Time_Printer() thread.daemon = True thread.start() print('Started %s' % (thread)) def start_B(self): thread = Time_Printer() thread.daemon = True thread.start() print('Started %s' % (thread)) def run_forever(self): self.start_A() time.sleep(0.5) self.start_B() try: while True: time.sleep(1) except KeyboardInterrupt: print("Caught Keyboard Interrupt...") sys.exit(0) if __name__ == '__main__': infinite_loop = Infinite_Loop_Tutor_Question() infinite_loop.run_forever() -------------------------------------- In my example above, testing the everything but the run_forever method is trivial. So on to my question... The run_forever method essentially just fires up a bunch of threads to serve various purposes and then waits for CTRL-C to terminate the entire program. Testing this at the moment is very difficult because the unit test ends up in the infinite loop. So, would a better idea be to create an attribute, set it to True and then do try: while self.attribute: time.sleep(1) except KeyboardInterrupt: ... My unit test could then set the attribute. However I'd still have the problem of how I get from the unit test line that fires up the method to the next line to change the attribute. So how should the run_forever method be written so that it's testable, or if it's testable as is, how would I test it? And please, no comments about syntax, clean exits of threads, thread communication, resources, or even the need for testing the run_forever method. In my test I want to test that it makes the relevant calls and then enters the infinite loop at which point I want to terminate it. Thanks in advance, and hopefully there are no formatting issues this time. -- James
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor