объект str не вызывается для unittest

1

Я написал тестовый пример, который показывает ошибку

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",

это сработало

но все же я не мог точно указать, что может быть причиной этого?

  • 0
    Для меня ваш скрипт вызывает ошибку NameError: name 'unittest' is not defined , как положено. Если вы импортируете символы из unittest в основной модуль, имя unittest .
  • 0
    Как указывал @Sven, ваш скрипт выдает NameError в class MyTest(unittest.TestCase) потому что from unittest import * не приводит к unittest что unittest связывается с чем-либо. Изменение только на import unittest решает эту import unittest . Я не понимаю, что вы имеете в виду под «но я все еще не могу точно сказать» - перефразируйте.
Показать ещё 1 комментарий
Теги:
python-3.x
testing

2 ответа

3
Лучший ответ

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 * поддерживается.

-1

Я сделал это так. Переопределите метод 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()
  • 0
    Даже вы получите "TypeError: объект 'str' не вызывается"
  • 0
    Я получил «AssertionError: Образец теста вычитания» (PythonWin 2.6.6)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню