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

Popular posts from this blog

c++ - How do I get a multi line tooltip in MFC -

asp.net - In javascript how to find the height and width -

c# - DataTable to EnumerableRowCollection -