2015-03-01 3 views
0

У меня возникла проблема с проверкой длины переменной экземпляра. Я продолжаю получать эту ошибку:pytest error (newbie to pytest и TDD)

________________________________________ ERROR collecting test_Person.py _________________________________________ 
test_Person.py:7: in <module> 
    person1 = Person("Tara", "Manderson", "F") 
E TypeError: 'module' object is not callable 
    ------------------------------------------------ Captured stdout ------------------------------------------------- 
gender is: 
F 
last name is: 
Manderson 
first name is: 
Tara 
Ms. Tara Manderson is: 
S 
Ms. Tara Manderson 
gender is: 
M 
last name is: 
Murray 
first name is: 
Christopher 
Mr. Christopher Murray is: 
S 
Mr. Christopher Murray 
============================================ 1 error in 0.18 seconds ============================================= 

Может кто-нибудь объяснить и/или помочь мне понять, что делать? Вот мой код:

Person.py класс Person (объект):

def __init__(self, first, last, sex): 
     try: 
      self.first = str(first) 
      self.last = str(last) 
      if (((sex=="M") or (sex=="F")) and (len(sex)==1)): 
       self.sex = sex 
      elif ((not(sex=="M") or not(sex=="F")) or not(len(sex)==1)): 
       raise UserWarning("Invalid Input! Use \"M\" for male or \"F\" for female.") 
      else: 
       raise TypeError("Not a valid gender! Use \"M\" for male or \"F\" for female.") 
      self.civilstat= "S" 
     except TypeError: 
      print ("invalid arguement error") 


    def getSex(self): 
     print ("gender is:") 
     return self.sex 


    def getLastName(self): 
     print ("last name is:") 
     return self.last 


    def getFirstName(self): 
     print ("first name is:") 
     return self.first 


    def getCivilStatus(self): 
     print (self.formalName() + " is:") 
     return self.civilstat 


    def setStatus(self, stat): 
     if (((self.civilstat=="M") or (self.civilstat=="D") or (self.civilstat=="S")) and (len(self.civilstat)==1)): 
      self.civilstat= stat 

     elif ((not(self.civilstat=="M") or not(self.civilstat=="F")) or not(len(self.civilstat)==1)): 
      print ("not a valid status") 

     else: 
      print ("not a valid status") 


    def setMarried(self, newLastName): 
      if (self.sex == "F") and (newLastName == ""): 
       raise ValueError("Please, what is her new last name? Re-enter her maiden name if she didn't change it.") 

      elif (self.sex == "F") and (newLastName != ""): 
       self.maiden= self.last 
       self.last= newLastName 
       self.civilstat= "M" 

      elif (self.sex == "M") and (newLastName == ""): 
        self.civilstat= "M" 

      elif (self.sex == "M") and (newLastName != ""): 
       raise ValueError("Well, that's strange here. Please, leave his last name blank like \" \".") 


    def setDivorced(self): 
     if (self.civilstat != "M"): 
      raise UserWarning("Wait! That person is not married.") 
     elif (self.civilstat == "M"): 
      self.civilstat= "D" 
      self.last= self.maiden 

    def formalName(self): 
     if (self.sex== "M"): 
      self.title= "Mr." 

     elif (self.sex== "F"): 
      if (self.civilstat== "M"): 
       self.title= "Mrs." 

      else: 
       self.title= "Ms." 

     return (self.title + " " + self.first + " " + self.last) 


person1 = Person("Tara", "Manderson", "F") 
person2 = Person("Christopher", "Murray", "M") 
print (person1.getSex()) 
print (person1.getLastName()) 
print (person1.getFirstName()) 
print (person1.getCivilStatus()) 
print (person1.formalName()) 

print (person2.getSex()) 
print (person2.getLastName()) 
print (person2.getFirstName()) 
print (person2.getCivilStatus()) 
print (person2.formalName()) 

test_Person.py

import pytest 
    import Person 


    person1 = Person("Tara", "Manderson", "F") 

    @pytest.fixture 
    def test_getSex(): 
      assert len(person1.getSex) == 1 

ответ

0

Как jcoppens mentioned вы хотите исправить свой импорт. Но у вашего теста есть еще несколько проблем.

Ваш тест должен быть возможно:

def test_getSex(): 
     assert len(person1.getSex()) == 1 

Примечания getSex() - если нет скобок вы утверждающая длину методы, а не результат возвращается.

Как правило, когда вы начинаете с тестирования, используйте инструкции печати, чтобы убедиться, что вы тестируете то, что, по вашему мнению, испытываете. например распечатайте person1, присвойте person1.getSex() переменной и распечатайте ее тоже, прежде чем на ней нажимать.

Также он не выглядит так, как будто ваша тестовая функция нуждается в декораторе @pytest.fixture, так что его можно удалить.

1

В тестовой программе, я считаю, вы должны либо

  • Префикс класса Person с именем модуля: Person.Person (....)

или

  • Изменение импорта в 'от Person импорта *'. В этом случае все классы импортируются как «местные»
Смежные вопросы