#python #unit-testing #boolean #pytest #assert
#python #модульное тестирование #логическое #pytest #утверждение
Вопрос:
РЕДАКТИРОВАТЬ: файл создавался, а затем удалялся в другом месте моего скрипта, поэтому, по-видимому, не существовал в моем рабочем каталоге всякий раз, когда я проверял. Я не могу удалить это сообщение, но должен уточнить, что приведенный ниже код (неотредактированный из исходного сообщения) действительно работает.
Я использую pytest
и собираюсь использовать assert
для проверки истинности того, что определенное утверждение является ложным — например, что элемент не существует в списке. Например:
def test_file_created(self):
'''Checks that a non-existing file exists in the current
working dir after construction of a new MyClass instance.'''
assert not 'myfile.txt' in os.listdir() # This is the line I need help with!
x = MyClass() # A class that writes a file
x.createfile('myfile.txt')
assert 'myfile.txt' in os.listdir()
Приведенное выше возвращает AssertionError
, как и assert 'myfile.txt' in os.listdir() == False
. Это невозможно, или есть какой-то творческий способ обойти это?
Комментарии:
1. Если
assert not 'myfile.txt' in os.listdir()
выдает ошибку, то в текущем каталоге есть файл с именемmyfile.txt
. Вы забыли написать код очистки для своих тестов?2.
in
и==
оба являются операторами сравнения, поэтомуx in y == False
это то же самое, чтоx in y and y == False
.3. Я понял, что допустил ошибку — мой установочный код создавал файл, и поскольку мой код очистки затем удалял файл всякий раз, когда я заглядывал в каталог и не мог видеть файл, я предположил, что это проблема с моим утверждением assert!
Ответ №1:
Это верно. Он ведет себя так, как и должно быть, предполагая, что файл действительно существует в рабочем каталоге. Ошибка утверждения возникает, когда утверждение ложно; и утверждение проходит, если оно истинно.
Это означает, что ошибка утверждения возникает ИЗ-ЗА того, ЧТО файл существует, поскольку утверждение о ТОМ, что он НЕ существует, завершается ошибкой.
Возможно, вы хотите пропустить создание файла, если он уже существует, но все равно пройти тест?
Комментарии:
1.
not
Утверждение утверждает, что файл не существовал до его создания. (Очевидно, файл уже существует.)