Форум сайта python.su
Всем привет. Есть класс и три метода, которые получают год, месяц, дату. Нужно получить заполненный объект этого класса и протестировать, что все три числа вместе составляют корректную дату.
import unittest class Calendar: def __init__(self, year, month, day): self.year = year self.month = month self.day = day def get_year(self): year = self.year return year def get_month(self): month = self.month return month def get_day(self): day = self.day return day date = Calendar(2020, 44, 12) yyyy = date.get_year() mm = date.get_month() dd = date.get_day() result = str(yyyy) + "-" + str(mm) + "-" + str(dd) class Test(unittest.TestCase): def is_correct(self): if len(yyyy) != 4 and not yyyy.isdigit(): return False elif len(mm) != 1 and not mm.isdigit(): return False elif 31 < len(dd) < 1 and not dd.isdigit(): return False elif (mm == 2 and dd > 28) and ((mm == 4 or 6 or 9 or 11) and dd > 30): return False else: return True def test_validation(self): self.assertTrue(result.is_correct(), True) if __name__ == "__main__": unittest.main()
Отредактировано Ivannn (Май 22, 2016 18:59:08)
Офлайн
Ну собственно а вопрос в чем? В чем помогать?
p.s.
Код принято оборачивать в теги см кнопочку <>
Офлайн
Не запускается - выдает self.assertTrue(result.is_correct(), True)
AttributeError: ‘str’ object has no attribute ‘is_correct’
Офлайн
В каком питоне вы такое нашли?
Офлайн
IvannnНу и правильно result это строка у нее нет метода is_correct. Ровно что вам и написали. Этот тест у вас кривой.def test_validation(self): self.assertTrue(result.is_correct(), True)
Офлайн
да я знаю, что кривой, я только учусь. Не подскажете как мне сделать объект, в котором были бы все числа даты, что бы применить метод is_correct для проверки?
Офлайн
IvannnЕсли я вас правильно понял, то надо перенести is_correct в Calenda. При этом вы еще нарушаете краеугольный камень тестирования. Тесты должны быть независимы. Поэтому в вашем случае конечно не должны опираться на глобальные объекты date yyyy и тому подобное.
Не подскажете как мне сделать объект
Офлайн
Переделал немного:
import unittest class Calendar: def get_year(self): year = self.year return year def get_month(self): month = self.month return month def get_day(self): day = self.day return day def is_correct(self): if len(str(d.get_year())) != 4 and not str(d.get_year).isdigit(): return False elif len(str(d.get_month())) != 1 and not str(d.get_month()).isdigit(): return False elif 31 < len(str(d.get_day())) < 1 and not str(d.get_day()).isdigit(): return False elif d.get_month == 2 and d.get_day > 28: return False elif d.get_month == 4 or 6 or 9 or 11 and d.get_day > 30: return False else: return True d = Calendar() class Test(unittest.TestCase): def test_validation(self): d.year = 2020 d.month = 7 d.day = 25 date = (d.get_year(), d.get_month(), d.get_day()) self.assertTrue(date.is_correct(), True) if __name__ == "__main__": unittest.main()
Отредактировано Ivannn (Май 23, 2016 00:52:22)
Офлайн
Ivannn
date = (d.get_year(), d.get_month(), d.get_day())
self.assertTrue(date.is_correct(), True)
Ivannn
self.assertTrue(d.is_correct(), True)
Офлайн
Doza_and, благодарю! Задачу решил, можно закрывать тему.
Офлайн