В pytest (3.04; python 3.4) Я пытаюсь отключить вывод вывода при определенных обстоятельствах. Я пытаюсь следовать примеру на this doc page. Однако я не могу указать capsys как funcarg. В качестве продолжения я хотел бы принять аргументы funcarg и on-funcarg, чтобы я мог использовать метод класса, который принимает один или несколько нормальных аргументов. Как я могу это сделать?В pytest как временно отключить захват в методе класса?
В идеале, этот метод будет работать класс:
def always_print(self, message, capsys):
with capsys.disabled():
print(message)
Но, я даже не могу получить эту работу:
def always_print(capsys):
with capsys.disabled():
print('FIXME')
Получение ошибки:
...
> always_print()
E TypeError: always_print() missing 1 required positional argument: 'capsys'
Редактировать 1: Ответ Петра решил мои конкретные c выпуск. Тем не менее, я также обнаружил два важных предостережений, что я не определена в документации или других сообщений, поэтому делиться здесь пользы других'S:
- это кажется, что capsys.disabled() применяется только на стандартный вывод и не stderr, где я первоначально отправлял свои отладочные сообщения за лучшую практику.
- Если вы установили дескриптор файла в sys.stdout до, вызывая capys.disabled(), то из-за того, что файловый дескриптор файла работает с этим pytest, это не сработает.
Так, к примеру, вам нужно сделать это таким образом (например, если ваш kwargs может содержать дополнительный «файл» ключевое слово, как встроенный в печати() делает:
fhandle = kwargs.get('file', sys.stdout) #will not work!
with capsys.disabled():
fhandle = kwargs.get('file', sys.stdout) #must be in context
print(message, file=fhandle)
я вижу. Благодарю. Но это означает, что мне нужно добавить capys funcarg для каждого из моих тестов, чтобы передать его методу print_always. Я бы предпочел не делать этого, потому что это много лишних подробностей. Какие-либо предложения? – JJC
@JJC Привет, приятель, я отредактировал ответ и добавил решение, чтобы избежать лишних подробностей. –
Спасибо! Использование глобального модуля - это, пожалуй, немного клочья, но он выполняет свою работу и избегает добавления большого количества шума к моим тестовым функциям. Я обнаружил два важных оговорки, пытаясь заставить это работать, что раньше не встречалось в документации. Я добавил их. [Dzięki Piotrze! :)] – JJC