Я написал тестовый пример, который показывает ошибку
from unittest import *
class MyTest(unittest.TestCase):
def test_add(self):
self.assertEquals(1,(2-1),"Sample Subraction Test")
if __name__ == '__main__':
unittest.main()
Вывод: объект Str не может быть вызван
Вместо "from unittest import *" я дал "import unittest",
это сработало
но все же я не мог точно указать, что может быть причиной этого?
from... import *
- опасная практика, и ее следует использовать только тогда, когда модуль/пакет был спроектирован и рекламирован таким образом, и у вас есть все основания для этого.
Оказывается, unittest не был разработан таким образом, и когда этот метод используется, обнаруживаются два других "тестовых случая", но поскольку они не являются действительно тестовыми случаями, они создают проблемы.
Правильный способ сделать то, что вы хотите:
import unittest
class MyTest(unittest.TestCase):
def test_subtraction(self):
self.assertEqual(1, (2-1), "Sample Subraction Test")
if __name__ == '__main__':
unittest.main()
При исследовании этой проблемы я обнаружил, что переменную __all__
можно и нужно использовать для определения публичного API - ее присутствие не указывает на то, что from... import *
поддерживается.
Я сделал это так. Переопределите метод runTest(), создайте экземпляр, запустите test_add()
from unittest import TestCase
class MyTest(TestCase):
def runTest(self):
pass
def test_add(self):
self.assertEquals(1,(2-2),"Sample Subraction Test")
if __name__ == '__main__':
test = MyTest()
test.test_add()
NameError: name 'unittest' is not defined
, как положено. Если вы импортируете символы изunittest
в основной модуль, имяunittest
.NameError
вclass MyTest(unittest.TestCase)
потому чтоfrom unittest import *
не приводит кunittest
чтоunittest
связывается с чем-либо. Изменение только наimport unittest
решает этуimport unittest
. Я не понимаю, что вы имеете в виду под «но я все еще не могу точно сказать» - перефразируйте.