Python 我可以吗;“关闭”@unittest.expectedFailure?
让我们假设,无论出于什么原因,我都想编写一组测试用例,从失败代码的前提开始 可能是因为设置故障非常复杂,而演示固定状态非常简单。在我的例子中,甚至不是这样,我想从一个失败的测试开始,然后展示如何修复它,以便于文档记录 我可以在基类上修饰Python 我可以吗;“关闭”@unittest.expectedFailure?,python,python-unittest,Python,Python Unittest,让我们假设,无论出于什么原因,我都想编写一组测试用例,从失败代码的前提开始 可能是因为设置故障非常复杂,而演示固定状态非常简单。在我的例子中,甚至不是这样,我想从一个失败的测试开始,然后展示如何修复它,以便于文档记录 我可以在基类上修饰@unittest.expectedFailure 但是由于装饰是继承的,固定的子类意外地成功了 我能以某种方式消除预期的失败吗 在代码本身中,而不是在命令行参数中 当我使用并欣赏pytest时,这是一个针对常规unittest的问题 unittest.skip
@unittest.expectedFailure
但是由于装饰是继承的,固定的子类意外地成功了
我能以某种方式消除预期的失败吗
- 在代码本身中,而不是在命令行参数中
- 当我使用并欣赏
时,这是一个针对常规pytest
的问题unittest
不是我想要的,我确实想运行unittest.skipXXX
Test\u这应该会失败
的测试
#@这取决于内部实现的
unittest.expectedFailure
,但可以作为一个开始:
def预期成功(测试项目):
测试项目。\uuuuu单元测试\u预期\u失败\uuuuu=False
返回测试项目
@unittest.expectedFailure
类TestFailure(unittest.TestCase):
def测试(自我):
self.assertTrue(False)
@预期的成功
类TestSuccess(TestFailure):
def测试(自我):
self.assertTrue(True)
请注意,
test\u item
既可以是类也可以是函数,这取决于您将装饰器放置在何处。很聪明,尽管“delattr”可能更好-以防测试系统在某个点切换到使用“hasattr”而不使用测试值。让我试试。没错,尽管我不认为他们会改变这一点——通常这是其他工具所依赖的内部结构。你可能是对的,它在任何情况下都可以正常工作。Txs。
import sys
import unittest
@unittest.expectedFailure
class Test_ThisShouldFail(unittest.TestCase):
""" for argument's sake, let's say
the configuration and testing is very complicated
and I want it fail by default.
Subclasses fix the issue but re-use the test code
"""
data = dict(a=1, b=2)
def test_evens(self):
for key, v in self.data.items():
self.assertFalse(v % 2, f"{key}:Odd on {v}")
#@ This relies on the internal implementation of unittest.expectedFailure
, but works for a start:
def expectedSuccess(test_item):
test_item.__unittest_expecting_failure__ = False
return test_item
@unittest.expectedFailure
class TestFailure(unittest.TestCase):
def test_something(self):
self.assertTrue(False)
@expectedSuccess
class TestSuccess(TestFailure):
def test_something(self):
self.assertTrue(True)