我正在為 pytest 創建一個測驗類,我想設定一個a將用于多個測驗方法的類屬性。為此,我使用了一個固定裝置set_a,它會自動啟動autouse=True,并且只為類 () 呼叫一次scope='class',因為設定a成本很高。這是我的代碼:
import pytest
import time
class Test:
@pytest.fixture(scope='class', autouse=True)
def set_a(self):
print('Setting a...')
time.sleep(5)
self.a = 1
def test_1(self):
print('TEST 1')
assert self.a == 1
但是測驗失敗并出現以下錯誤:
========================================================================= FAILURES ==========================================================================
________________________________________________________________________ Test.test_1 ________________________________________________________________________
self = <tests.test_file.Test object at 0x116d953a0>
def test_1(self):
print('TEST 1')
> assert self.a == 1
E AttributeError: 'Test' object has no attribute 'a'
tests/test_file.py:15: AttributeError
------------------------------------------------------------------- Captured stdout setup -------------------------------------------------------------------
Setting a...
------------------------------------------------------------------- Captured stdout call --------------------------------------------------------------------
TEST 1
a即使被呼叫,它看起來也沒有設定set_a,就像在執行測驗時創建了一個新的類實體一樣。
如果我將夾具范圍更改為 ,效果很好function,但我不想a為每個測驗設定。
知道這里有什么問題嗎?
uj5u.com熱心網友回復:
您不應該設定范圍,因為您已經在課堂上。
class Test:
@pytest.fixture(autouse=True)
def set_a(self):
print("Setting a...")
time.sleep(5)
self.a = 1
def test_1(self):
print("TEST 1")
assert self.a == 1
這是您應該使用的方式scope=class,這意味著它適用于您模塊中的任何類:
@pytest.fixture(scope="class", autouse=True)
def a(request):
print("Setting a...")
time.sleep(5)
request.cls.a = 1
class Test:
def test_1(self):
print("TEST 1")
assert self.a == 1
uj5u.com熱心網友回復:
如果值永遠不會改變另一個選項是在測驗方法之外定義它——
import pytest
import time
class Test:
a = 1
def test_1(self):
print('TEST 1')
assert self.a == 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/468299.html
