假設我有一個這樣的函式:def foo(a, b),我可以測驗它的呼叫:
@pytest.mark.parametrize("a", [1,2,3])
@pytest.mark.parametrize("b", [1,2,3])
def test_foo(a, b):
foo(a, b)
但是,使用默認引數會使它變得有點復雜。如果我將函式更改為def foo(a, *, b=0),則測驗它會變得復雜:
@pytest.mark.parametrize("a", [1,2,3])
@pytest.mark.parametrize("b", [1,2,3])
def test_foo(a, b):
foo(a, b=b)
但我也想驗證b作品的默認引數,即測驗呼叫foo(a)。是否有可能以一種很好的方式調整這個測驗,以便它也能測驗它?
我唯一的想法是這樣的:
@pytest.mark.parametrize("a", [1,2,3])
@pytest.mark.parametrize("b", [1,2,3,None])
def test_foo(a, b):
if b:
foo(a, b=b)
else:
foo(a)
或將其拆分為多個測驗,但它看起來很愚蠢且不優雅。有什么更好的解決方案嗎?
uj5u.com熱心網友回復:
怎么樣:
@pytest.mark.parametrize("a", [1,2,3])
@pytest.mark.parametrize("kwargs", [{"b": 1}, {"b": 2}, {"b": 3}, {}])
def test_foo(a, kwargs):
foo(a, **kwargs)
或者可能更多地保留您的原始想法,但呼叫更簡潔:
@pytest.mark.parametrize("a", [1,2,3])
@pytest.mark.parametrize("b", [1, 2, 3, None])
def test_foo(a, b):
kwargs = {"b": b} if b is not None else {}
foo(a, **kwargs)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365140.html
上一篇:將值替換為資料集列上的整數
下一篇:在一個圖上繪制多個圖
