from: http://www.lengrand.fr/2011/12/pythonunittest-assertraises-raises-error/
Во-первых, вот соответствующая (все еще dum : p) в файле dum_function.py:
def square_value(a):
"""
Returns the square value of a.
"""
try:
out = a*a
except TypeError:
raise TypeError("Input should be a string:")
return out
Вот тест, который нужно выполнить (только этот тест вставлен):
import dum_function as df # import function module
import unittest
class Test(unittest.TestCase):
"""
The class inherits from unittest
"""
def setUp(self):
"""
This method is called before each test
"""
self.false_int = "A"
def tearDown(self):
"""
This method is called after each test
"""
pass
#---
## TESTS
def test_square_value(self):
# assertRaises(excClass, callableObj) prototype
self.assertRaises(TypeError, df.square_value(self.false_int))
if __name__ == "__main__":
unittest.main()
Теперь мы готовы проверьте нашу функцию! Вот что происходит при попытке выполнить тест:
======================================================================
ERROR: test_square_value (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_dum_function.py", line 22, in test_square_value
self.assertRaises(TypeError, df.square_value(self.false_int))
File "/home/jlengrand/Desktop/function.py", line 8, in square_value
raise TypeError("Input should be a string:")
TypeError: Input should be a string:
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
ТипError активирован и генерирует ошибку теста. Проблема в том, что это именно то, что мы хотели: s.
Чтобы избежать этой ошибки, просто запустите функцию, используя лямбда в тестовом вызове:
self.assertRaises(TypeError, lambda: df.square_value(self.false_int))
Конечный вывод :
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Отлично!
... и для меня тоже отлично!
Thansk много г-н Жюльен Ленгранд-Ламберт
Вы пропускаете знак равенства. Это должно быть:
return HourlyTick.objects.filter(timestamp__range=(start, end))
Вам также нужно будет преобразовать строки datetime в объекты datetime.