python - Unit testing: More Actions than Expected after calling addAction Method -
here class:
class managementreview(object): """class describing managementreview object. """ # class attributes id = 0 title = 'new management review object' fiscal_year = '' region = '' review_date = '' date_completed = '' prepared_by = '' __goals = [] # list of <managementreviewgoals>. __objectives = [] # list of <managementreviewobjetives>. __actions = [] # list of <managementreviewactions>. __deliverables = [] # list of <managementreviewdeliverable>. __issues = [] # list of <managementreviewissue>. __created = '' __created_by = '' __modified = '' __modified_by = '' def __init__(self,title='',id=0,fiscal_year='',region='',review_date='', date_completed='',prepared_by='',created='',created_by='', modified='',modified_by=''): """instantiate object. """ if id: self.setid(id) if title: self.settitle(title) if fiscal_year: self.setfiscal_year(fiscal_year) if region: self.setregion(region) if review_date: self.setreview_date(review_date) if date_completed: # xxx todo: validation see if date_completed pattern matches iso-8601 self.setdate_completed(date_completed) if prepared_by: self.setprepared_by(prepared_by) if created: # xxx todo: validation see if date_completed pattern matches iso-8601 self.setcreated(created) else: self.setcreated(self.getnow()) if created_by: self.setcreated_by(created_by) self.__modified = self.getnow() if modified_by: self.__modified_by = modified_by def __str__(self): return "<managementreview '%s (%s)'>" % (self.title,self.id) def __setattr__(self, name, value): # override built-in setter # set value usual , update modified attribute object.__setattr__(self, name, value) # built-in self.__dict__['__modified'] = datetime.now().isoformat() def getactions(self): return self.__actions def addaction(self,mra): self.__actions.append(mra) def removeaction(self,id): pass # xxx todo
i have test:
from datetime import datetime import random import unittest managementreview import managementreview, managementreviewaction # default values managementreviewaction object type dummy_id = 1 dummy_action = 'action 1' dummy_owner = 'owner 1' dummy_title = 'test mr' dummy_fiscal_year = '2011' dummy_region = 'wo' dummy_review_date = '2009-01-18t10:50:21.766169', dummy_date_completed = '2008-07-18t10:50:21.766169' dummy_prepared_by = 'test user' dummy_created = '2002-07-18t10:50:21.766169' dummy_created_by = 'test user 2' dummy_modified = datetime.now().isoformat() dummy_modified_by = 'test user 3' class testmanagementreviewsetaction(unittest.testcase): def setup(self): self.mr = managementreview(dummy_title,dummy_id,fiscal_year=dummy_fiscal_year,region=dummy_region, review_date=dummy_review_date,date_completed=dummy_date_completed, prepared_by=dummy_prepared_by,created=dummy_created, created_by=dummy_created_by,modified=dummy_modified, modified_by=dummy_modified_by) def teardown(self): self.mr = none def test_add_action(self): in range(1,11): mra = managementreviewaction(i,'action '+str(i),'owner '+str(i)) self.mr.addaction(mra) self.assertequal(len(self.mr.getactions()),10) def test_remove_action(self): print len(self.mr.getactions()) in range(1,11): mra = managementreviewaction(i,'action '+str(i),'owner '+str(i)) self.mr.addaction(mra) self.mr.removeaction(3) self.assertequal(len(self.mr.getactions()),9) if __name__ == '__main__': unittest.main()
the first test passes. is, self.mr.getactions() has 10 actions.
however, when run 2nd test, test_remove_action, value len(self.mr.getactions())
10. @ point, though, should 0.
why this?
thanks
see if keeping track of actions in class attribute of managementreview
opposed instance attribute
a class attribute like
class spam(object): actions = []
and instance attribute like
class spam(object): def __init__(self): self.actions = []
what happens actions = []
executed when class created , instances of class share same list.
edit: in light of update, can see going on
Comments
Post a Comment