Я пытаюсь написать тестовый класс, который включает в себя генератор и запустить тест с nosetests
. Тем не менее, я смущен тем, как nosetests
тест бегун, кажется, изолируют методы в тестовом классе, так что они не одни и те же self
:Поведение метода генератора Nosetest
class Test(object):
def check(self):
print self.one
def test(self):
self.one = 1
yield self.check
Это дает мне следующее сообщение об ошибке:
AttributeError: 'Test' object has no attribute 'one'
Я предполагаю, что это имеет какое-то отношение к носу, изолируя тесты друг от друга. Есть ли какая-то работа, отличная от передачи всех необходимых переменных в ящик явно вместо неявно в качестве атрибутов на self
?
Чтобы быть ясным, я знаю, как назначать атрибуты в «стандартном» Python. Я не об этом спрашиваю. Я хочу знать, как я могу достичь желаемого поведения в тестовом прогоне nosetests
с помощью команды nosetests
.
Per Tanveer's предложение я мог бы добавить __init__
метод для инициализации атрибута. Это обход, но он отвечает на мой вопрос, как я изначально его представлял.
Однако, в конечном итоге, я хочу, чтобы он выполнял цикл с помощью инструкции yield, изменяя значение атрибута на self
и имея этот регистр изменений в значении self
в методе check
. Добавление __init__
не позволяет мне это делать.
class Test(object):
def __init__(self):
self.one = None
def check(self):
print self.one
def test(self):
self.one = 1
yield self.check
я получаю:
$ nosetests nosetest-with-classes.py --nocapture
None
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Там еще, кажется, некоторый тип изоляции метод уровня проводится в жизнь с помощью бегунка nosetests. Поэтому я хотел бы немного углубиться, чтобы понять, что происходит. Есть ли способ обменивать атрибуты в переменной self
обычным способом?
Вы можете включить метод '__init__' и инициализировать свой экземпляр с помощью' one' в качестве аргумента. –