AttributeError: у объекта 'list' нет атрибута '_getAssertEqualityFunc' при попытке создать оболочку вокруг assertEquals - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь создать метод-обертку вокруг assertEquals (код ниже).Когда я запускаю тесты, я получаю следующую ошибку: «AttributeError: у объекта« список »нет атрибута« _getAssertEqualityFunc »»

Я пытался использовать напрямую assertEquals, и это работает, но мне нужно сделать больше вещей, когда утверждаюне удается.

from unittest import TestCase as a


class Asserts:

    _assert_list = []

    @property
    def assert_list(self):
       return self._assert_list

    def equals(self, first, second, msg=None):
        """Fail if the two objects are unequal as determined by the '=='
           operator.
        """
        try:
            A.assertEquals(first, second, msg)

        except AssertionError:
            self._assert_list.append(AssertionError.__cause__)

Редактировать: немного изменил код.Я хочу использовать это при выполнении нескольких тестов, чтобы не останавливаться в середине цикла, если что-то не получится по пути.Например, make all all утверждает, что вместо остановки теста в случае неудачи он добавляет причину в список, и в конце я буду утверждать, если список пуст или нет.

Трассировка:
Трассировка (последний последний вызов):
«Путь» файла, строка 88, в test_tc_01 self.a.equals (self.li, self.li2)
Файл«путь», строка 21, равно a.assertEquals (первый, второй, msg)
File «путь», строка 1321, в deprecated_func return original_func (* args, ** kwargs)
файл «path», строка828, assertEqual assertion_func = self._getAssertEqualityFunc (first, second) AttributeError: объект list не имеет атрибута _getAssertEqualityFunc

EDIT 2: у меня несколько утверждений в одном тесте. Если, например, первыйтерпит неудачу, остальные из них пропущены. Вот почему я хочу реализовать это в моей структуре

РЕДАКТИРОВАТЬ 3: по запросу, поставив здесь тест

def setUp(self):
    self.driver = WebDriver(browser='chrome').browser
    self.driver.get(self.RLO_URL)
    self.driver.maximize_window()
    self.wait = WebDriverWait(self.driver, 10)
    self.driver.implicitly_wait(10)
    self.a = Asserts()

    login_page = LoginPage(self.driver)
    login_page.log_in()

def test_tc_01(self):
    self.maxDiff = None
    nav_page = NavBarPage(self.driver)
    nav_page.go_to_start_new_process()

    start_new_process_page = StartNewProcessPage(self.driver)
    start_new_process_page.start()

    process_page = ProcessPage(self.driver)
    app_info = process_page.application_info
    import pdb; pdb.set_trace()

    # self.assertEquals(app_info.get_country_list(), self.EXPECTED_COUNTRIES)
    self.assertEquals(app_info.get_channel_list(), self.EXPECTED_CHANNELS)
    self.assertEquals(app_info.get_marketing_source_list(), self.EXPECTED_MARKETING_SOURCE)
    self.assertEquals(app_info.get_marketing_agreement_list(), self.EXPECTED_MARKETING_AGREEMENT)
    self.assertEquals(app_info.get_office_credit_list(), self.EXPECTED_OFFICE_CREDIT)

def tearDown(self):
    self.driver.quit()

1 Ответ

0 голосов
/ 20 сентября 2018

Я взял пример из документации unittest здесь и добавил в середине провальный тест (утверждал, что false - это правда только для того, чтобы показать вам это).

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_fail(self):
        self.assertTrue(False)

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()

Когда вы запустите это, вы получите следующий вывод:

======================================================================
FAIL: test_fail (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/refael.cohen/PycharmProjects/tools & trials/unittest_suite.py", line 13, in test_fail
    self.assertTrue(False)
AssertionError: False is not true

----------------------------------------------------------------------
Ran 4 tests in 0.001s

FAILED (failures=1)

Обратите внимание, что даже при сбое комплекта все тесты были выполнены.

Кроме того, вы можете использовать декоратор @unittest.expectedFailure, чтобы ожидать, что тест не пройден, и тогда весь набор пройдет

...