Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2012 21:49:40

chand
Зарегистрирован: 2012-05-15
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Unit Testing

Метод который тестируем

    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

???

Офлайн

#2 Май 24, 2012 22:04:16

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Unit Testing

Что такое исключение знаете?



Офлайн

#3 Май 24, 2012 22:20:42

chand
Зарегистрирован: 2012-05-15
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Unit Testing

Да, слышал где-то
Здесь, как раз,тест должен провалиться, потому исключения нет.

Офлайн

#4 Май 24, 2012 22:32:38

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Unit Testing

Покажите полный код. У меня всё ловится )

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)



Отредактировано fata1ex (Май 24, 2012 22:36:12)

Офлайн

#5 Май 24, 2012 22:36:43

chand
Зарегистрирован: 2012-05-15
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Unit Testing

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

Отредактировано chand (Май 24, 2012 22:39:51)

Офлайн

#6 Май 24, 2012 22:46:32

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Unit Testing

Избавьтесь от кортежа.

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)



Отредактировано fata1ex (Май 24, 2012 22:54:59)

Офлайн

#7 Май 24, 2012 22:57:30

chand
Зарегистрирован: 2012-05-15
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Unit Testing

Звучит смешно, но не работает, как и ваш пример

Офлайн

#8 Май 24, 2012 23:01:09

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Unit Testing

Функция 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)



Отредактировано fata1ex (Май 24, 2012 23:01:43)

Офлайн

#9 Май 24, 2012 23:06:09

chand
Зарегистрирован: 2012-05-15
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Unit Testing

Хмм, я передаю любое количество аргументов, а тест успешен. Возможно что-то с питоном / библиотекой тестинга?
Возможно не правильная конфигурация?

Отредактировано chand (Май 24, 2012 23:08:39)

Офлайн

#10 Май 24, 2012 23:14:57

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Unit Testing

Покажите класс Users целиком. Если тест проходит, значит где-то взлетает исключение.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version