Использование assert для проверки истинности условия False в Python

#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 Утверждение утверждает, что файл не существовал до его создания. (Очевидно, файл уже существует.)