>

기본적으로 많은 테스트에 대해 동일한 코드를 가지고 있지만 일부 값만 변경되기 때문에 픽스처에 값을 전달하려고합니다 .pytest 픽스처는 이해하지 못하지만이를 해결하는 방법을 잘 모르겠습니다 예를 들면 다음과 같습니다.

import pytest

@pytest.fixture
def option_a():
    a = 1
    b = 2
    return print(a + b)

@pytest.fixture
def option_b():
    a = 5
    b = 3
    return print(a + b)

def test_foo(option_b):
    pass

조명기 옵션 a 또는 옵션 b 중 하나를 선택하는 대신, 추가하고 변경하는 유일한 것은 값입니다. test_foo에서 실행할 값을 설정할 수있는 조명기를 하나 가질 수 있습니까?

사전에 감사합니다.


  • 답변 # 1

    제공 한 예제는 너무 간단해서 조명기가 필요하지 않습니다. 당신은 그냥 :

    import pytest
    @pytest.mark.parametrize("a,b,expected", [
        (1,2,3),
        (5,3,8),
    ])
    def test_foo(a, b, expected):
        assert a + b == expected
    
    

    자세한 내용은 https://docs.pytest.org/en/3.6.1/parametrize.html을 참조하십시오

    그러나 가정 하겠지만 MCVE를 만드는 과정에서이를 단순화했습니다. 이 경우 다음을 수행하십시오.

    @pytest.fixture(params=[(1 , 2, "three"), (5,3,"eight")])
    def option_a_and_b(request):
        a, b, word = request.param
        return a + b, word
    def test_foo(option_a_and_b):
        total, word = option_a_and_b
        if total == 3:
            assert word == "three"
        elif total == 8:
            assert word == "eight"
        else:
            assert False
    def test_bar(option_a_and_b):
        pass
    
    

    이 코드를 실행하면 해당 픽스처를 얻는 모든 테스트가 각 param 에 대해 실행되므로 4 개의 테스트를 통과하게됩니다. .

    자세한 내용은 https://docs.pytest.org/en/3.6.1/fixture.html#fixture-parametrize를 참조하십시오.

  • 이전 javascript - NextJS&Express와 서비스 작업자에게 혼동
  • 다음 C의 간단한 strtod () 예제