복붙노트

[PYTHON] 파이썬 unittest 프레임 워크에서 전역 변수 수정하기

PYTHON

파이썬 unittest 프레임 워크에서 전역 변수 수정하기

필자는 파이썬에서 일련의 단위 테스트를하고 있는데, 그 중 일부는 구성 변수의 값에 의존합니다. 이 변수는 전역 파이썬 구성 파일에 저장되며 다른 모듈에서 사용됩니다. 구성 변수의 다른 값에 대한 단위 테스트를 작성하고 싶지만 아직 수행 할 방법을 찾지 못했습니다.

테스트 할 메소드의 서명을 다시 작성할 가능성이 없습니다.

이것이 내가 성취하고자하는 바입니다.

from my_module import my_function_with_global_var

class TestSomething(self.unittest):

    def test_first_case(self):
         from config import MY_CONFIG_VARIABLE
         MY_CONFIG_VARIABLE = True
         self.assertEqual(my_function_with_global_var(), "First result")

    def test_second_case(self):
         from config import MY_CONFIG_VARIABLE
         MY_CONFIG_VARIABLE = False
         self.assertEqual(my_function_with_global_var(), "Second result")

감사.

편집 : 예제 코드를 더 명확하게 만들었습니다.

해결법

  1. ==============================

    1.사용 가능한 경우 @ Flimm의 대답과 같이 unittest.mock.patch를 사용하십시오.

    사용 가능한 경우 @ Flimm의 대답과 같이 unittest.mock.patch를 사용하십시오.

    이것을하지 마십시오 :

    from my_module import my_function_with_global_var
    

    하지만 이것은:

    import my_module
    

    그런 다음 테스트중인 시스템을 다음과 같이 변경하지 않고 가져온 my_module에 MY_CONFIG_VARIABLE을 삽입 할 수 있습니다.

    class TestSomething(unittest.TestCase): # Fixed that for you!
    
        def test_first_case(self):
             my_module.MY_CONFIG_VARIABLE = True
             self.assertEqual(my_module.my_function_with_global_var(), "First result")
    
        def test_second_case(self):
             my_module.MY_CONFIG_VARIABLE = False
             self.assertEqual(my_module.my_function_with_global_var(), "Second result")
    

    내 대답은 비슷한 방법을 어떻게 pyunit에 대한 표준 입력을 시뮬레이션 할 수 있습니까? .

  2. ==============================

    2.대신 전역 변수를 모의하고 싶을 것이다. 이점은 완료되면 전역 변수가 재설정된다는 것입니다. 파이썬에는 이것을 할 수있는 조롱 (mocking) 모듈이 함께 제공됩니다.

    대신 전역 변수를 모의하고 싶을 것이다. 이점은 완료되면 전역 변수가 재설정된다는 것입니다. 파이썬에는 이것을 할 수있는 조롱 (mocking) 모듈이 함께 제공됩니다.

    unittest.mock.patch가 데코레이터로 사용됩니다.

    class TestSomething(self.unittest):
    
        @patch('config.MY_CONFIG_VARIABLE', True)
        def test_first_case(self):
             self.assertEqual(my_function_with_global_var(), "First result")
    

    컨텍스트 관리자로 사용할 수도 있습니다.

        def test_first_case(self):
            with patch('config.MY_CONFIG_VARIABLE', True):
                self.assertEqual(my_function_with_global_var(), "First result")
    
  3. ==============================

    3.MY_CONFIG_VARIABLE을 로컬 범위로 가져 와서 다른 개체로 즉시 덮어 씁니다. config 모듈의 값은 변경되지 않습니다. 시험

    MY_CONFIG_VARIABLE을 로컬 범위로 가져 와서 다른 개체로 즉시 덮어 씁니다. config 모듈의 값은 변경되지 않습니다. 시험

    import config
    config.MY_CONFIG_VARIABLE = False
    

    대신.

  4. from https://stackoverflow.com/questions/6268278/modifying-global-variables-in-python-unittest-framework by cc-by-sa and MIT license