
很多小伙伴都有疑惑,在 Python 中,setup_class() 和 __init__() 都是用于初始化的方法,但它们有什么不同的用途和使用场景呢?
特性 | __init__() | setup_class() |
|---|---|---|
用途 | 普通类的构造函数 | 测试框架(pytest)中的类级别setup方法 |
调用时机 | 每次创建类的新实例时 | 在整个测试类执行前只调用一次 |
所属领域 | 面向对象编程 | 测试框架 |
参数 | 接收self作为第一个参数 | 接收cls作为第一个参数(类方法) |
调用次数 | 每个实例一次 | 每个测试类一次 |
import pytest
# 普通类使用 __init__()
class RegularClass:
def __init__(self, value):
self.value = value
print(f"RegularClass initialized with value: {value}")
def display(self):
print(f"Value: {self.value}")
# 测试类使用 setup_class()
class TestExample:
@classmethod
def setup_class(cls):
"""在整个测试类执行前只运行一次"""
cls.shared_resource = "Shared Data"
print("Setup class - this runs once before any tests")
def __init__(self):
"""注意:在pytest测试类中通常不定义__init__"""
print("Test instance created")
def test_method_1(self):
print(f"Test method 1 using {self.shared_resource}")
assertTrue
def test_method_2(self):
print(f"Test method 2 using {self.shared_resource}")
assertTrue
# 演示代码
if __name__ == "__main__":
print("=== 演示 RegularClass 的 __init__() ===")
obj1 = RegularClass(10)
obj2 = RegularClass(20)
obj1.display()
obj2.display()
print("\n=== 演示 TestClass 的 setup_class() ===")
# 注意:实际测试中pytest会自动调用setup_class()
test_instance = TestExample()
# 手动调用setup_class来演示
TestExample.setup_class()
test_instance.test_method_1()
test_instance.test_method_2()
__init__()来初始化实例属性setup_class()来进行测试类级别的初始化setUpClass()__init__()方法setup_class()需要使用@classmethod装饰器setup_class()主要用于设置所有测试方法共享的资源在实际工作应用中,我们通常是在创建普通Python函数时,使用__init__()初始化;但在设置Pytest自动化测试环境时,使用setup_class()进行初始化始化操作
如果觉得对你有帮助,不要忘记 点赞 分享 噢~