Уведомления

Группа в Telegram: @pythonsu

#1 Июль 9, 2013 00:19:04

r2d2
Зарегистрирован: 2013-05-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

unit-тест

Есть класс последовательности с методами вставки элемента и поиска

class Sequence(object):
    def __init__(self):
        self.first = None
        self.len = 0
       
    def add(self,new):
        self.len += 1
        if self.first is None:
            self.first = element(new)
        else:
            self.first = element(new, self.first)
     
    def find(self, index):
        i = self.first
        num = 0
        while num is not index:
            i = i.nex
            num += 1
        print i.value

Класс самого элемента
class element(object):
    def __init__(self, value = None, nex = None):
        self.value = value
        self.nex = nex

В unit тесте
from list import Sequence as s
import unittest
class testsequence (unittest.TestCase):
   
    def setUp(self):
        self.lst = s()
    
    def testadd(self):
        self.lst.add(1)
        self.lst.add(2)
        self.lst.add(3)
        self.lst.add(4)
        self.lst.printall()
        
            
    def testfind(self):
        index = input ("Введите индекс")
        self.lst.find(index)
      
if __name__ == "__main__":
    unittest.main()

Выводит следующее:
.4
3
2
1
Введите индекс1
E
======================================================================
ERROR: testfind (__main__.testsequence)
———————————————————————-
Traceback (most recent call last):
File “C:\eclipse\workspace\test\test.py”, line 21, in testfind
self.lst.find(index)
File “C:\eclipse\workspace\test\list.py”, line 38, in find
i = i.nex
AttributeError: ‘NoneType’ object has no attribute ‘nex’

———————————————————————-
Ran 2 tests in 2.251s

FAILED (errors=1)

Почему первый тест проходит, а второй нет?


Офлайн

#2 Июль 9, 2013 02:17:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

unit-тест

.setUp() выполняется заново перед каждым тестом
в тестах не должно быть человеческого участия
то есть человек не должен ничего вводить и ничего читать
http://www.diveintopython3.net/unit-testing.html
http://www.diveintopython3.net/refactoring.html



Офлайн

#3 Июль 9, 2013 11:49:24

r2d2
Зарегистрирован: 2013-05-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

unit-тест

Даже когда я без ввода в тесте передаю в функцию какое-нибудь значение, ошибка та же.

Офлайн

#4 Июль 10, 2013 01:10:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

unit-тест

прочитай ещё раз насчёт .setUp()
ошибка в том, что он создаёт пустой объект перед каждым тестом
поэтому, если даже у тебя .testadd() выполнился первым (что не обязательно, он может и последним выполниться), то перед .testfind() то, что там было добавлено, стирается



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version