2015-02-10 2 views
0

Ниже программы:UnitTest в Python

import unittest 

class my_class(unittest.TestCase): 


    def setUp(self): 
     print "In Setup" 
     self.x=100 
     self.y=200 

    def test_case1(self): 
     print "-------------" 
     print "test case1" 
     print self.x 
     print "-------------" 
    def test_case2(self): 
     print "-------------" 
     print "test case2" 
     print self.y 
     print "-------------" 
    def tearDown(self): 
     print "In Tear Down" 
     print "  " 
     print "  " 

if __name__ == "__main__": 
    unittest.main() 

дает выход:

>>> ================================ RESTART ================================ 
>>> 
In Setup 
------------- 
test case1 
100 
------------- 
In Tear Down 

.In Setup 
------------- 
test case2 
200 
------------- 
In Tear Down 
     . 
---------------------------------------------------------------------- 
Ran 2 tests in 0.113s 

OK 
>>> 
>>> 

Вопросы:

  1. что смысл: if __name__ == "__main__": unittest.main()?

  2. Почему у нас есть двойные символы подчеркивания и префиксы для name и main?

  3. Где будет создан объект для my_class?

+0

См. Этот вопрос http://stackoverflow.com/questions/419163/what-does-if-name-main-do – HavelTheGreat

+0

1. Задавайте один вопрос одновременно. 2. Лидирующие и завершающие двойные подчеркивания используются для обозначения * "" магических "объектов или атрибутов, которые находятся в контролируемых пользователем пространствах имен" *, на [PEP-0008] (https://www.python.org/dev/peps/ PEP-0008/# описательных-именование-стили). Это мешает им сталкиваться с именами пользователей (например, вы можете вызывать функцию 'main' или переменную' name'). См. http://stackoverflow.com/q/19216895/3001761 3. Что вы имеете в виду * "где" * ?! – jonrsharpe

ответ

2

if __name__ == "__main__": бит позволяет вашему код, который будет импортирован как модуль без вызова unittest.main() кода - который будет работать только если этот код будет вызван в качестве основной точки входа вашей программы (т.е. если вы назвали его как python program.py если ваша программа была в program.py).

Префикс и постфикс двойного подчеркивания означают:

__double_leading_and_trailing_underscore__: «волшебные» объекты или атрибуты, которые живут в контролируемом пользователе пространств имен. Например. __init__, __import__ или __file__. Никогда не изобретайте такие имена; используйте их только как задокументированные.

Это результат PEP 8 Style Guide - это действительно полезный ресурс для чтения и интернализации.

И наконец, ваш класс my_class будет создан в рамках рамки unittest при запуске, так как он наследует от unittest.TestCase.

+0

Спасибо @ lukas-graf, все еще учась. :) – jimjkelly