programing

unitest Vspytest

subpage 2023. 10. 21. 10:28
반응형

unitest Vspytest

유니트 테스트에서, 나는 할 수 있습니다.setUp클래스의 변수와 이 클래스의 메소드는 사용할 변수를 선택할 수 있습니다...

class test_class(unittest.TestCase):
    def setUp(self):        
        self.varA = 1
        self.varB = 2
        self.varC = 3
        self.modified_varA = 2

    def test_1(self):
        do_something_with_self.varA, self.varB

    def test_2(self):
        do_something_with_self_modified_varA, self.varC

그래서 유니트 테스트에서는 한 클래스 아래로 들어갈 수 있는 여러 가지 테스트를 한데 모은 다음 다양한 변수를 사용하는 것이 쉬웠습니다. (varA그리고.varB다른 방법에 대해 설명합니다.파이테스트에서 고정장치를 만들었죠conftest.py이런 식의 시험 수업 대신에...

@pytest.fixture(scope="module")
def input1():
    varA = 1
    varB = 2
    return varA, varB

@pytest.fixture(scope="module")
def input2():
    varA = 2
    varC = 3
    return varA, varC

나는 이 입력 1과 입력 2를 두 개의 다른 함수에 대해 다른 파일(test_this.py라고 하자)로 내 함수에 공급합니다.위의 정보를 바탕으로 한 질문들은 다음과 같습니다.

  1. 지역 변수만 선언할 수는 없기 때문에conftest.py단순히 이 파일을 가져올 수는 없기 때문입니다.여기서 다른 함수에서 사용할 수 있는 다른 변수를 선언하는 더 나은 방법이 있습니까?test_this.py는 이 에 대한 다른 있는데,y 의 여러 가지 하고 test_thispy의 5가지 다른 에서 함수 사용하는 은 괴로운 일처럼 들립니다. 차라리 유니테스트 클래스 구조로 돌아가서 변수를 정의하고 원하는 것을 선택하고 싶습니다. 저는 이 변수들에 대한 실제 테스트에서 5가지 다른 구성을 가지고 있는데, conftest.py 의 많은 다른 고정 장치를 정의하고 test_this.py의 5가지 다른 함수에서 함수 인수로 사용하는 것은 괴로운 일처럼 들립니다. 차라리 유니테스트 클래스 구조로 돌아가서 변수를 정의하고 내가 원하는 것을 선택하고 싶습니다.

  2. 글로벌 변수를 선언해야 합니까?test_this.py내가 원하는 방식으로 기능을 사용할 수 있습니까?피톤적이지 않은 것 같습니다.이 변수는 이 파일의 함수에서만 사용됩니다.

  3. 내가 가지고 있다고 치자.test_that.py그리고.test_them.py뿐만 아니라.서로 다른 파일 간에 공유된 변수가 있다면 어떻게 선언합니까? 이 모든 테스트 파일이 있는 디렉터리에 variables.py 이라는 파일을 만들고 필요할 때마다 가져오기만 하면 됩니까?이렇게 하면 모든 데이터를 별도로 보관할 수 있습니다.

  4. 파이테스트가 당신의 기능을 정리하기 위해 수업을 사용하는 것을 억제하는 것이 나의 인상입니까?제가 온라인으로 읽는 모든 예시들은 고정 장치만 있는 많은 기능들을 사용하는 것 같습니다.파이테스트에서 클래스와 메소드를 정의하고 테스트를 구성하는 구성은 무엇입니까?

  5. 한 기능의 결과를 다른 기능에 사용해야 하는 테스트 시나리오가 있습니다.pytest의 경우, 반환이 아닌 함수의 끝에 있는 주장이 있어서 이 함수를 고정 장치로 사용할 수 없습니다.어떻게 하면 이것을 해낼 수 있을까요?이것이 내 시험이 다른 시험에 의존하는 좋은 관행이 아니라는 것을 알지만 해결책이 있습니까?

1) 우선 conftest.py 뿐만 아니라 원하는 모든 Python 모듈에서 이러한 고정 장치를 선언할 수 있습니다.그리고 그 모듈을 가져올 수 있습니다.또한 setUp 방법을 사용한 것과 동일한 방법으로 고정 장치를 사용할 수 있습니다.

@pytest.fixture(scope='class')
def input(request):
    request.cls.varA = 1
    request.cls.varB = 2
    request.cls.varC = 3
    request.cls.modified_varA = 2

@pytest.usefixtures('input')
class TestClass:
    def test_1(self):
        do_something_with_self.varA, self.varB

    def test_2(self):
        do_something_with_self_modified_varA, self.varC

또는 별도의 고정 장치에서 별도의 변수를 정의할 수 있습니다.

def fixture_a():
    return varA

def fixture_b():
    return varB

def fixture_c():
    return varC

def fixture_mod_A():
    return modified_varA

또는 모든 변수를 반환하는 하나의 고정 장치를 만들거나(왜 그렇지 않습니까?), 선택한 대로 변수를 반환하는 간접 매개 변수화된 고정 장치를 만들기도 합니다(quite 혼동 방식).

@pytest.fixture()
def parametrized_input(request):
   vars = {'varA': 1, 'varB': 2, 'varC': 3}
   var_names = request.param
   return (vars[var_name] for var_name in var_names)

@pytest.mark.parametrize('parametrized_input', [('varA', 'varC')], indirect=True)
def test_1(parametrized_input)
   varA, varC = parametrized_input
   ...

또는 당신이 즉석에서 당신을 위한 고정장치를 만들 수 있는 고정장치 공장을 만들 수도 있습니다.5개의 검정과 5개의 변수 구성만 있을 때 이상하게 들리지만, 두 변수를 모두 수백 개씩 얻을 때 유용할 수 있습니다.

3) 물론 가능합니다.그러나 이 파일을 직접 가져오지 말고 가져올 파일을 가리키는 명령줄 옵션을 사용하는 것이 좋습니다.이 경우 코드를 변경하지 않고 변수가 있는 다른 파일을 선택할 수 있습니다.

4) 저는 테스트가 없는 상태에서 마이그레이션했기 때문에 테스트에 클래스를 사용합니다.pytest에서 수업 사용에 대한 문제는 언급하지 않았습니다.

5) 그런 경우에 저는 여러분에게 다음과 같이 할 것을 제안합니다: fist는 원하는 동작으로 기능을 만듭니다.

def some_actions(a, b):
    # some actions here
    ...
    return c

그런 다음 테스트 및 고정 장치에 모두 사용합니다.

def test():
    assert some_actions(1,2) == 10

@pytest.fixture()
def some_fixture():
     return some_actions(1,2)

저는 유니트 테스트가 읽기 편하다고 생각합니다.새로운 시험 보는 사람들에게, 유니트 테스트는 정말 쉽습니다.그것은 틀에 박히지 않고 있습니다.Python 구현에 의존하지만 향후 몇 년 동안 인터페이스가 변경되지는 않을 것입니다.

저는 파일당 최대 1개의 시험을 치르도록 시험을 정리하는 것을 좋아합니다.수업에 의존하지 않는 경우에는...하지만 저는 모든 시험에서 무언가를 하기 위해 수업을 수입합니다.

일부 웹사이트에서는 유니트 테스트에서 색상에 대한 불만을 제기하기도 합니다.제 유닛 테스트에서 Jenkins와 다른 사람들을 위해 JUNIT 출력 보고서를 만들기 때문에 농담이라고 생각합니다.JUNIT을 웹사이트로 변환하기 위한 훌륭한 도구(심지어 한 개의 파일)가 있습니다. 그것은 테스트 도구의 책임이 아닙니다.

또한, 어떤 사람들은 유니트 테스트를 시작하기 위해 많은 코드가 필요하다고 불평합니다.저는 동의하지 않습니다, 유니트 테스트를 만들려면 4줄의 코드가 필요합니다!그러나 Pytest는 단순한 Python 개발자에게는 정상적이지 않은 어려운 주석을 모두 알아야 합니다.

또한 중요한 이유는 유니트 테스트가 무료로 유지된다는 것입니다.그러나 어떤 이유로 pytest(비트 버킷 등)를 사용하려면 테스트를 변환하고 코드를 읽을 수 없게 만드는 도구가 있습니다.

재미있게 보내!

언급URL : https://stackoverflow.com/questions/27954702/unittest-vs-pytest

반응형