在pytest中报 cannot collect test class 'TestPush' because it has a __init__ 怎么解决
时间: 2023-06-24 10:04:33 浏览: 41
这个错误通常是由于 pytest 尝试收集测试类时遇到了带有 `__init__` 方法的类,而 pytest 不支持 `__init__` 方法作为测试类的方法。
有两种解决方案:
1. 将测试类中的 `__init__` 方法删除,或者将其中的代码移动到 `setup_method` 方法中。`setup_method` 方法是 pytest 支持的用于每个测试方法执行前的初始化操作的方法。
示例代码:
```python
class TestPush:
def setup_method(self):
# 初始化操作
pass
def test_push(self):
# 测试代码
pass
```
2. 将测试类的名称改为不包含 `Test` 的名称。pytest 默认会收集以 `Test` 开头的测试类,所以将名称改为其他名称可以避免 pytest 收集这个类。
示例代码:
```python
class Push:
def __init__(self):
# 初始化操作
pass
def test_push(self):
# 测试代码
pass
```
希望这可以帮助你解决问题。
相关问题
PytestCollectionWarning: cannot collect test class 'BasePage' because it has a __init__ constructor (from: test_case/test_mycase.py)
这个警告表明,pytest无法收集测试类BasePage,因为它有一个__init__构造函数。这可能是因为在测试类中定义了__init__方法,导致pytest无法正确处理它。解决方法是将__init__方法更改为类方法或静态方法。
pytest中的__init__
pytest中的`__init__`是一个特殊的方法,用于初始化测试类的实例。当测试类被实例化时,`__init__`方法会被自动调用。
在`__init__`方法中,可以定义测试类的属性,例如测试数据、测试配置等。这些属性可以在测试方法中使用。
以下是一个示例:
```python
class TestMath:
def __init__(self):
self.x = 10
self.y = 5
def test_add(self):
assert self.x + self.y == 15
def test_subtract(self):
assert self.x - self.y == 5
```
在这个示例中,`__init__`方法定义了两个属性`x`和`y`,它们被两个测试方法`test_add`和`test_subtract`使用。这样可以避免在每个测试方法中都定义测试数据,提高了代码的复用性和可读性。