Python unittest的setUp方法是否每次执行测试方法前都会重置?
问题解答
你观察到的运行结果是unittest框架的标准表现,self.dave的salary属性确实会在每个测试方法调用前重置为初始值,核心原因如下:
setUp()方法的执行规则:unittest框架规定,setUp()会在每一个以test开头的测试方法执行前,单独完整运行一次。也就是说你每跑一个测试方法,都会重新执行self.dave = Employee("dave", "stanton", 20000),生成一个全新的Employee实例,不同测试方法之间的self.dave是完全独立的对象,状态不会互相传递。- 测试用例的默认执行顺序:unittest默认按照测试方法名称的ASCII编码顺序排序执行,
test_custom_raise的前缀test_c排序优先级高于test_default_raise的test_d,所以实际执行顺序和你以为的「先跑默认涨薪再跑自定义涨薪」刚好相反:- 第一次执行
setUp():生成工资为20000的dave实例,执行test_custom_raise传入10000涨薪,工资变为30000并打印,该测试执行完毕后实例被销毁 - 第二次执行
setUp():重新生成工资为20000的全新dave实例,执行test_default_raise使用默认5000涨薪,工资变为25000并打印
- 第一次执行
如果你需要让所有测试方法共享同一个实例(不推荐,会导致测试用例耦合,不符合单元测试独立性原则),可以将实例化逻辑放在setUpClass()类方法中,该方法只会在整个测试类所有用例执行前运行一次。
内容的提问来源于stack exchange,提问作者bobo
相关产品推荐
相关产品推荐

