Pytest, утверждаю, не нарушая поток программы - PullRequest
0 голосов
/ 19 декабря 2018

Я использую pytest, и в тестовой функции, которую я использую, у меня есть несколько условий, которые я хотел бы проверить с помощью assert, а затем в конце теста получить список тех, которые потерпели неудачу.

К сожалению, если утверждение не выполнено, тест немедленно прерывается и не проверяет другие условия.Можно ли использовать assert, который не нарушает поток программы?

import pytest

def test_example():
  value1 = 1
  value2 = 0
  value3 = 0

  assert value1 == 1
  assert value2 == 2
  assert value3 == 3

Вывод

================================== FAILURES ===================================
________________________________ test_example _________________________________

    def test_example():
      value1 = 1
      value2 = 0
      value3 = 0

      assert value1 == 1
>     assert value2 == 2
E     assert 0 == 2

test_demo.py:50: AssertionError
========================== 1 failed in 0.21 seconds ===========================

Как вы можете видеть после сбоя второго утверждения, он перестает работать,Есть способ обойти это.Я решил написать операторы if, чтобы проверить каждое условие, и если они не пройдены, увеличить счетчик и, в конце, проверить, равен ли этот счетчик 0, но это не будет отслеживать, какой тест не удался.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Использование try/except:

def test():
    value1 = 1
    value2 = 2
    value3 = 3

    try:
        assert value1==1
    except AssertionError as e:
        print(e)

    # continue this process for each value
0 голосов
/ 19 декабря 2018

Многие утверждения в тесте - плохая практика.Пожалуйста, прочитайте правило 5 в «Сила 10: Правила разработки критического для безопасности кода» НАСА и другие источники.И вы можете параметризовать свой тест.

...