2016-04-08 11 views
1

内のすべてのユニットテスト前に呼び出されていませんこれは、クラスSchoolをテストする私のコードです:セットアップ機能はPython

class SchoolTest(unittest.TestCase): 
    def setUp(self): 
     # assertCountEqual is py3, py2 only knowns assetItemsEqual 
     if not hasattr(self, 'assertCountEqual'): 
      self.assertCountEqual = self.assertItemsEqual 
     self.school = School("Haleakala Hippy School") 

    def test_an_empty_school(self): 
     for n in range(1, 9): 
      self.assertCountEqual(set(), self.school.grade(n)) 

    def test_add_student(self): 
     self.school.add("Aimee", 2) 
     self.assertCountEqual(("Aimee",), self.school.grade(2)) 

私はすべてのテストの前に新しいSchoolオブジェクトを作成します。私がテストを実行すると、私は次のエラーで終わる:

def test_an_empty_school(self): 
     for n in range(1, 9): 
      self.assertCountEqual(set(), self.school.grade(n)) 
    AssertionError: Element counts were not equal: 
    First has 0, Second has 1: 'Aimee' 

それは最初のテストが失敗した理由です、第二のテストが最初に呼び出され、新しいオブジェクトが作成されていないことを意味します。

私がコメントしてテストを実行すると、どのコメントに関係なくテストが実行されます。

私は1つの基本的なものが欠けているように感じます。

私は間違っていますか?念のため

Schoolクラス:

class School(): 
    _db = dict() 

    def __init__(self, name): 
     self.name = name 

    @property 
    def db(self): 
     return self._db 

    def add(self, student, grade): 
     if grade not in self._db: 
      self._db[grade] = set() 

     self._db[grade].add(student) 

    def grade(self, grade): 
     if grade not in self._db: 
      return set() 

     return self._db[grade] 

    def sort(self): 
     sorted_list = [] 

     for grade in self._db: 
      sorted_list.append((grade, tuple(self._db[grade]))) 

     return sorted_list 
+0

初期化することにより、インスタンス属性_dbにする必要がありますか? –

+0

'self.school'が実際に作成されました – user3159253

+0

どのようにテストを実行していますか? _exact_の出力をあなたの質問に貼り付けましたか? – snakecharmerb

答えて

2

問題がSchool._dbへの変更は、テスト実行の間で生き残るようSchool._dbが、ないインスタンスに、クラスの属性であるということです。

あなたはそれがassertItemsEqual` `何School.__ init __

class School(): 

    def __init__(self, name): 
     self.name = name 
     self._db = dict() 
+0

正確に!どうもありがとうございました! –

関連する問題