Найти - Пользователи
Полная версия: Unit Testing
Начало » Python для новичков » Unit Testing
1 2
chand
Метод который тестируем
    def add_man(self,id,sess):
        return False

Тест
    def test_ololo(self):
        self.assertRaises(Exception,self.user.add_man,(2,3))

Ran 1 test in 0.000s
OK

???
fata1ex
Что такое исключение знаете?
chand
Да, слышал где-то
Здесь, как раз,тест должен провалиться, потому исключения нет.
fata1ex
Покажите полный код. У меня всё ловится )
import random
import unittest
  
 
class A(object):
	def __init__(self, value):
		self.value = value
 
	def foo(self):
		print self.value
 
 
class TestClassA(unittest.TestCase):
	def setUp(self):
		self.a = A(random.random())
 
	def test_foo(self):
		self.assertRaises(Exception, self.a.foo)
  
  
if __name__ == "__main__":
	unittest.main()

[23:34] home:~/dev/fun python help.py
0.486900038352
F
======================================================================
FAIL: test_foo (__main__.TestClassA)
----------------------------------------------------------------------
Traceback (most recent call last):
File "help.py", line 18, in test_foo
self.assertRaises(Exception, self.a.foo)
AssertionError: Exception not raised

----------------------------------------------------------------------
Ran 1 test in 0.016s

FAILED (failures=1)
chand
users.py
class Users():
    def add_man(self,id,sess):
        if self.add_to_dict(id,sess):
            if id not in mans:
                self.mans[id] = {'sess':sess}
            else:
                print '123'
        else:
            print '123'
        #raise TypeError
        return False

test_users_py
from users import Users
import unittest
class TestUsers(unittest.TestCase):
    def setUp(self):
        self.user = Users()
    def test_ololo(self):
        self.assertRaises(Exception,self.user.add_man,(2,3))
if __name__ == '__main__':
    unittest.main()

chandler@chandler ~/socketio/tests $ python test_users.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
fata1ex
Избавьтесь от кортежа.

def foo(self, oopsy, woopsy):
        pass
def test_foo(self):
        self.assertRaises(Exception, self.a.foo, (1, 2))
OK,

но:
def foo(self, oopsy, woopsy):
        pass
def test_foo(self):
        self.assertRaises(Exception, self.a.foo, 1, 2)
FAILED

assertRaises(exception, callable, *args, **kwds)

Если непонятно, то вот такой пример должен всё объяснить:

import random
import unittest
  
 
class A(object):
	def __init__(self, value):
		self.value = value
 
	def foo(self, oopsy):
		print oopsy
 
 
class TestClassA(unittest.TestCase):
	def setUp(self):
		self.a = A(random.random())
 
	def test_foo(self):
		self.assertRaises(Exception, self.a.foo, (1, 2))
  
  
if __name__ == "__main__":
	unittest.main()
Выводит
(1, 2)
F
======================================================================
FAIL: test_foo (__main__.TestClassA)
----------------------------------------------------------------------
Traceback (most recent call last):
File "help.py", line 18, in test_foo
self.assertRaises(Exception, self.a.foo, (1, 2))
AssertionError: Exception not raised

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)
chand
Звучит смешно, но не работает, как и ваш пример
fata1ex
Функция add_man принимает явно два аргумента, а вы ей через тест передаёте лишь один - кортеж (1,2). Взлетает TypeError.

>>> (lambda x, y: x+y)((1,2))
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: <lambda>() takes exactly 2 arguments (1 given)
chand
Хмм, я передаю любое количество аргументов, а тест успешен. Возможно что-то с питоном / библиотекой тестинга?
Возможно не правильная конфигурация?
fata1ex
Покажите класс Users целиком. Если тест проходит, значит где-то взлетает исключение.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB