python - AttributeError: 'list' 对象在尝试围绕 assertEquals 进行包装时没有属性 '_getAssertEqualityFunc'
问题描述
我正在尝试围绕 assertEquals 制作一个包装器方法(下面的代码)。当我运行测试时,我收到以下错误:“AttributeError:'list' object has no attribute '_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__)
编辑:稍微更改了代码。我想在执行多个测试时使用它,以便在运行过程中出现故障时不会在运行过程中停止。就像所有这些断言一样,如果测试失败,它不会停止测试,而是将原因附加到列表中,最后我将断言列表是否为空。
Traceback:
Traceback(最近一次调用最后一次):
文件“路径”,第 88 行,在 test_tc_01 self.a.equals(self.li, self.li2)
文件“路径”,第 21 行,等于 a.assertEquals(first,第二,味精)
文件“路径”,第 1321 行,在 deprecated_func 返回 original_func(*args, **kwargs)
文件“路径”,第 828 行,在 assertEqual assertion_func = self._getAssertEqualityFunc(first, second) AttributeError: 'list' object has没有属性“_getAssertEqualityFunc”
编辑 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()
解决方案
我从 unittest 文档here中举了一个例子,并在中间添加了一个失败的测试(断言 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
装饰器来预期测试失败,然后整个套件将通过
推荐阅读
- linux - Bash 或 Awk 脚本用于合并 X 个字段匹配的行,同时在不匹配的字段中创建范围
- python-3.x - 从由其他列分区的列中返回具有第一个值的记录
- laravel - Laravel 7 身份验证不持久
- java - 将子集的总和转换为可以并行执行的流
- javascript - 尝试为“map()”遍历的每个图像添加“onClick”并显示模态
- ruby-on-rails - Heroku 在未定义时设置 SECRET_KEY_BASE
- r - 如何使用 R 计算简单线性回归中的 b0 和 b1?
- cakephp - CakePHP 3:->find('all') 包含未填充相关数据
- python - 电子邮件 Django 中的多个文件
- html - 包裹中心网格项目