python測開,python定義test方法_關于python:使用pytest測試類方法

 2023-11-30 阅读 27 评论 0

摘要:在pytest的文檔中,列出了測試用例的各種示例。 其中大多數顯示了功能測試。 但是我缺少一個有關如何測試類和類方法的示例。 假設我們要測試的模塊cool.py中具有以下類:class SuperCool(object):def action(self, x):return x * xtests/test_cool.py中的相應測試

在pytest的文檔中,列出了測試用例的各種示例。 其中大多數顯示了功能測試。 但是我缺少一個有關如何測試類和類方法的示例。 假設我們要測試的模塊cool.py中具有以下類:

class SuperCool(object):

def action(self, x):

return x * x

tests/test_cool.py中的相應測試類應如何顯示?

python測開。class TestSuperCool():

def test_action(self, x):

pass

test_action()如何用于測試action()?

測試類方法所需要做的就是實例化該類,然后在該實例上調用該方法:

def test_action(self):

python定義函數后調用、sc = SuperCool()

assert sc.action(1) == 1

那么,pytest中不涉及任何映射嗎?

@laserbrain我不確定在這種情況下映射的含義,但是如果您嘗試的話,我的示例應該適用。

我的意思是方法test_action()映射到action()上,因此不需要實例化(例如自動魔術)。

@laserbrain,以及這個自動魔術師如何找出您要執行哪種斷言和檢查?顯式勝于隱式。

python 全局變量、@laserbrain我仍然沒有真正遵循,但是afaik在大多數情況下pytest會將類方法與普通頂級函數相同

@elethan我有一個類似于class TestSuperCool的類,但是該類具有類似于def test_action)的多個功能。當我直接運行pytest test_module.py::TestSuperCool::test_action時,它可以正常運行,并且我的測試通過了。但是,當我運行pytest test_module.py::TestSuperCool時,它會失敗。您知道如何在pytest中而不是每個測試函數中測試單個測試類嗎?

實際上沒有后顧之憂..我的ipython或Windows10上的ipython似乎有問題。似乎即使我執行%reset -s之后,它也不會重置或清除ipython中的名稱空間。當我在ipython中運行它時,這種情況反復發生。重新啟動ipython后,問題消失了。

好吧,一種方法是只在測試方法中創建對象并從那里與之交互:

def test_action(self, x):

o = SuperCool()

python set、assert o.action(2) == 4

您顯然可以使用以下方法使用經典的setup和teardown樣式單元測試之類的東西:http://doc.pytest.org/en/latest/xunit_setup.html

我不確定如何使用它們,因為pytest的文檔太糟糕了。

編輯:是的,如果您做類似的事情,那么顯然

class TestSuperCool():

def setup(self):

python類,self.sc = SuperCool()

...

# test using self.sc down here

我只會使用任何固定裝置來創建測試環境(例如數據庫連接)或數據參數化。

如果您的數據比較瑣碎,可以在測試用例中定義它:

def test_action_without_fixtures():

python list?sc = SuperCool()

sc.element = 'snow'

sc.melt()

assert sc.element == 'water'

參數化示例:

@pytest.mark.parametrize("element, expected", [('snow', 'water'), ('tin', 'solder')])

python doctest,def test_action_with_parametrization(element, expected):

sc = SuperCool()

sc.element = element

sc.melt()

assert sc.element == expected

如果類的初始化很昂貴,但是您需要在類方法上運行大量參數化測試,則可以更改方法定義以允許外部輸入。然后,您可以在測試循環外進行一次初始化,并根據需要在方法上運行任意數量的測試。例如:

python unittest。代替這個:

class SuperCool():

def action(self):

return self.attribute ** 2

重寫以允許外部輸入:

class SuperCool():

python exception,def action(self, x=None):

if x is None:

x = self.attribute

return x ** 2

現在,您的測試腳本如下所示:

sc = SuperCool()

python strip、@pytest.mark.parametrize("x, y", [(1, 1), (2, 4)])

def test_action_with_parametrization(x, y):

assert sc.action(x) == y

但是我不是一個經驗豐富的程序員,所以希望這不是某種反模式的XD

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/186827.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息