Python 코드에 대해 유닛 테스트 설정Set up unit testing for Python code

단위 테스트는 애플리케이션의 다른 코드 단위(일반적으로 격리된 함수, 클래스 등)를 테스트하는 코드 조각입니다.Unit tests are pieces of code that test other code units in an application, typically isolated functions, classes, and so on. 애플리케이션이 모든 단위 테스트를 통과하면 최소한 하위 수준 기능이 올바른 것으로 신뢰할 수 있습니다.When an application passes all its unit tests, you can at least trust that its low-level functionality is correct.

Python은 단위 테스트를 광범위하게 사용하여 프로그램을 설계하는 동안 시나리오를 검증합니다.Python uses unit tests extensively to validate scenarios while designing a program. Visual Studio의 Python 지원에는 테스트를 별도로 실행할 필요 없이 개발 프로세스 컨텍스트 내에서 단위 테스트 검색, 실행, 디버깅이 포함됩니다.Python support in Visual Studio includes discovering, executing, and debugging unit tests within the context of your development process, without needing to run tests separately.

이 문서에서는 Visual Studio에서 Python을 사용하여 유닛 테스트를 수행하는 기능에 대해 간략히 설명합니다.This article provides a brief outline of unit testing capabilities in Visual Studio with Python. 일반적인 단위 테스트에 대한 자세한 내용은 코드 단위 테스트를 참조하세요.For more on unit testing in general, see Unit test your code.

테스트 검색 및 보기Discover and view tests

규칙에 따라 Visual Studio는 이름이 test로 시작하는 메서드로 테스트를 식별합니다.By convention, Visual Studio identifies tests as methods whose names start with test. 이 동작을 확인하려면 다음을 수행합니다.To see this behavior, do the following:

  1. Visual Studio에 로드된 Python 프로젝트를 열고 프로젝트를 마우스 오른쪽 단추로 클릭한 다음, 추가 > 새 항목을 선택하고 Python 단위 테스트, 추가를 차례로 선택합니다.Open a Python project loaded in Visual Studio, right-click your project, select Add > New Item, then select Python Unit Test followed by Add.

  2. 이렇게 하면 표준 unittest 모듈을 가져오고, unittest.TestCase에서 테스트 클래스를 파생하며. 스크립트를 직접 실행하는 경우 unittest.main()을 호출하는 코드가 있는 test1.py 파일이 만들어집니다.This action creates a test1.py file with code that imports the standard unittest module, derives a test class from unittest.TestCase, and invokes unittest.main() if you run the script directly:

    
    import unittest
    
    class Test_test1(unittest.TestCase):
        def test_A(self):
            self.fail("Not implemented")
    
    if __name__ == '__main__':
        unittest.main()
    
  3. 필요한 경우 파일을 저장하고 테스트 > Windows > 테스트 탐색기 메뉴 명령을 사용하여 테스트 탐색기를 엽니다.Save the file if necessary, then open Test Explorer with the Test > Windows > Test Explorer menu command.

  4. 테스트 탐색기는 프로젝트에서 테스트를 검색하고 아래와 같이 표시합니다.Test Explorer searches your project for tests and displays them as shown below. 테스트를 두 번 클릭하면 해당 소스 파일이 열립니다.Double-clicking a test opens its source file.

    기본 test_A를 보여 주는 테스트 탐색기

  5. 프로젝트에 더 많은 테스트를 추가함에 따라 도구 모음의 그룹화 방법 메뉴를 사용하여 테스트 탐색기에서 보기를 구성할 수 있습니다.As you add more tests to your project, you can organize the view in Test Explorer using the Group by menu on the toolbar:

    테스트 탐색기 그룹화 방법 도구 모음 메뉴

  6. 또한 검색 필드에 텍스트를 입력하여 이름별로 테스트를 필터링할 수도 있습니다.You can also enter text in the Search field to filter tests by name.

unittest 모듈 및 테스트 작성에 대한 자세한 내용은 Python 2.7 설명서 또는 Python 3.7 설명서(python.org)를 참조하세요.For more information on the unittest module and writing tests, see the Python 2.7 documentation or the Python 3.7 documentation (python.org).

테스트 실행Run tests

테스트 탐색기에서 다양한 방법으로 테스트를 실행할 수 있습니다.In Test Explorer you can run tests in a variety of ways:

  • 모두 실행은 표시된 모든 테스트를 명확하게 실행합니다(필터 적용).Run All clearly runs all shown tests (subject to filters).
  • 실행 메뉴는 실패한 테스트, 성공한 테스트 또는 실행하지 않은 테스트를 하나의 그룹으로 실행하는 명령을 제공합니다.The Run menu gives you commands to run failed, passed, or not run tests as a group.
  • 하나 이상의 테스트를 선택하고 마우스 오른쪽 단추로 클릭한 후 선택한 테스트 실행을 선택합니다.You can select one or more tests, right-click, and select Run Selected Tests.

백그라운드에서 테스트가 실행되고, 테스트가 완료되면 테스트 탐색기에 각 테스트 상태가 업데이트됩니다.Tests run in the background and Test Explorer updates each test's status as it completes:

  • 성공한 테스트에는 녹색 틱과 테스트를 실행하는 데 소요된 시간이 표시됩니다.Passing tests show a green tick and the time taken to run the test:

    test_A 성공 상태

  • 실패한 테스트에는 빨간색 십자 표시와 콘솔 출력 및 테스트 실행의 unittest 출력을 보여 주는 출력 링크가 표시됩니다.Failed tests show a red cross with an Output link that shows console output and unittest output from the test run:

    test_A 실패 상태

    test_A 실패 및 이유

테스트 디버그Debug tests

단위 테스트는 코드 조각이므로 다른 코드처럼 버그가 있을 수 있으며 경우에 따라 디버거에서 실행해야 합니다.Because unit tests are pieces of code, they are subject to bugs just like any other code and occasionally need to be run in a debugger. 디버거에서 중단점을 설정하고 변수를 검사하며 코드를 단계별로 실행할 수 있습니다.In the debugger you can set breakpoints, examine variables, and step through code. Visual Studio는 단위 테스트에 대한 진단 도구도 제공합니다.Visual Studio also provides diagnostic tools for unit tests.

디버깅을 시작하려면 코드에 초기 중단점을 설정하고 테스트 탐색기에서 테스트(또는 선택 항목)를 마우스 오른쪽 단추로 클릭한 다음, 선택한 테스트 디버그를 선택합니다.To start debugging, set an initial breakpoint in your code, then right-click the test (or a selection) in Test Explorer and select Debug Selected Tests. 애플리케이션 코드의 경우처럼 Visual Studio에서 Python 디버거를 시작합니다.Visual Studio starts the Python debugger as it would for application code.

테스트 디버깅

선택한 테스트에 대한 코드 검사 분석을 사용할 수 있습니다.You can also use the Analyze Code Coverage for Selected Tests. 자세한 내용은 코드 검사를 사용하여 테스트할 코드 범위 결정을 참조하세요.For more information, see Use code coverage to determine how much code is tested.

알려진 문제Known issues

  • 디버깅을 시작하면 Visual Studio에서 디버깅이 시작 및 중지되었다가 다시 시작되는 것처럼 보입니다.When starting debugging, Visual Studio appears to start and stop debugging, and then start again. 이는 정상적인 동작입니다.This behavior is expected.
  • 여러 테스트를 디버그하는 경우 각 테스트가 별도로 실행되므로 디버깅 세션이 중단됩니다.When debugging multiple tests, each one is run independently, which interrupts the debugging session.
  • 디버깅 시 Visual Studio가 테스트를 시작하는 데 일시적으로 실패합니다.Visual Studio intermittently fails to start a test when debugging. 일반적으로 테스트 디버깅을 다시 시도하면 성공합니다.Normally, attempting to debug the test again succeeds.
  • 디버깅 시 unittest 구현으로 테스트에서 나갈 수 잇습니다.When debugging, it is possible to step out of a test into the unittest implementation. 일반적으로 다음 단계는 프로그램의 끝까지 실행되고, 디버깅을 중지합니다.Normally, the next step runs to the end of the program and stops debugging.

Python 프로젝트에 대한 테스트 프레임워크 선택Select the test framework for a Python project

Visual Studio는 Python의 두 가지 테스트 프레임워크인 unittestpytest(Visual Studio 2019 버전 16.3부터 제공)를 지원합니다.Visual Studio supports two testing frameworks for Python, unittest and pytest (available in Visual Studio 2019 starting with version 16.3). 기본적으로 Python 프로젝트를 만들 때 프레임워크는 선택되지 않습니다.By default, no framework is selected when you create a Python project. 프레임워크를 지정하려면 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 속성 옵션을 선택합니다.To specify a framework, right-click on the project name in Solution Explorer and select the Properties option. 프로젝트 디자이너가 열리고, 테스트 탭을 통해 테스트를 구성할 수 있습니다. 이 탭에서 프로젝트에 사용하고자 하는 테스트 프레임워크를 선택할 수 있습니다.This opens the project designer, which allows you to configure tests through the Test tab. From this tab, you can select the test framework that you want to use for your project.

  • unittest 프레임워크의 경우 프로젝트의 루트 디렉터리가 테스트 검색에 사용됩니다.For the unittest framework, the project's root directory is used for test discovery. 이 위치와 테스트 식별을 위한 텍스트 패턴을 테스트 탭에서 사용자 지정 값으로 수정할 수 있습니다.This location, as well as the text pattern for identifying tests, can be modified on the Test tab to user specified values.
  • pytest 프레임워크의 경우 테스트 위치 및 파일 이름 패턴과 같은 테스트 옵션이 표준 pytest .ini 구성 파일을 사용하여 지정됩니다.For the pytest framework, testing options such as test location and filename patterns are specified using the standard pytest .ini configuration file. 자세한 내용은 pytest 참조 설명서를 참조하세요.See the pytest reference documentation for more details.

프레임워크 선택 및 설정을 저장하면 테스트 탐색기에서 테스트 검색이 시작됩니다.Once you've saved your framework selection and settings, test discovery is initiated in the Test Explorer. 테스트 탐색기 창이 아직 열려 있지 않은 경우 도구 모음으로 이동하여 테스트 > 테스트 탐색기를 선택합니다.If the Test Explorer window is not already open, navigate to the toolbar and select Test > Test Explorer.

프로젝트 없이 Python 테스트 구성Configure testing for Python without a project

Visual Studio를 사용하여 Python 코드가 포함된 폴더를 열어 프로젝트 없이 기존 Python 코드를 실행 및 테스트할 수 있습니다.Visual Studio allows you to run and test existing Python code without a project, by opening a folder with Python code. 해당 상황에서 PythonSettings.json 파일을 사용하여 테스트를 구성해야 합니다.Under these circumstances, you'll need to use a PythonSettings.json file to configure testing.

  1. 로컬 폴더 열기 옵션을 사용하여 기존 Python 코드를 엽니다.Open your existing Python code using the Open a Local Folder option.

    Visual Studio 시작 화면

  2. 솔루션 탐색기 창에서 모든 파일 표시 아이콘을 클릭하여 현재 폴더의 모든 파일을 표시합니다.Within the Solution Explorer window, click the Show All Files icon to show all files in the current folder.

    모든 파일 표시 단추

  3. Local Settings 폴더 내에 있는 PythonSettings.json 파일로 이동합니다.Navigate to the PythonSettings.json file within the Local Settings folder. Local Settings 폴더에서 이 파일이 표시되지 않는 경우 수동으로 만듭니다.If you don't see this file in the Local Settings folder, create it manually.

  4. 설정 파일에 TestFramework 필드를 추가하고 사용하고자 하는 테스트 프레임워크에 따라 pytest 또는 unittest를 선택합니다.Add the field TestFramework to the settings file and set it to pytest or unittest depending on the testing framework you want to use.

    {
    "TestFramework": "unittest",
    "UnitTestRootDirectory": "testing",
    "UnitTestPattern": "test_*.py"
    }
    

    참고

    unittest 프레임워크의 경우 PythonSettings.json 파일에서 UnitTestRootDirectoryUnitTestPattern 필드가 지정되지 않으면 각각 기본값인 “.” 및 “test*.py”로 추가 및 지정됩니다.For the unittest framework, if the fields UnitTestRootDirectory and UnitTestPattern are not specified in the PythonSettings.json file, they are added and assigned default values of "." and "test*.py" respectively.

  5. 폴더에 테스트에 포함된 폴더와는 별개인 src 디렉터리가 포함된 경우 PythonSettings.json 파일의 SearchPaths 필드를 사용하여 src 폴더에 대한 경로를 지정합니다.If your folder contains a src directory that is separate from the folder that contains your tests, specify the path to the src folder using the SearchPaths field in your PythonSettings.json file.

    {
    "TestFramework": "unittest",
    "UnitTestRootDirectory": "testing",
    "UnitTestPattern": "test_*.py",
    "SearchPaths": [ ".\\src"]
    }
    
  6. PythonSettings.json 파일에 변경 사항을 저장하여 지정된 프레임워크에 대한 테스트 검색을 시작합니다.Save your changes to the PythonSettings.json file to initiate test discovery for the specified framework.

    참고

    테스트 탐색기가 이미 열린 경우 CTRL + R,A를 누르면 검색이 실행됩니다.If the Test Explorer window is already open CTRL + R,A also triggers discovery.

테스트 검색 및 보기Discover and view tests

기본적으로 Visual Studio는 이름이 test로 시작하는 메서드로 unittestpytest 테스트를 식별합니다.By default, Visual Studio identifies unittest and pytest tests as methods whose names start with test. 테스트 검색을 확인하려면 다음을 수행합니다.To see test discovery, do the following:

  1. Python 프로젝트를 엽니다.Open a Python project.

  2. Visual Studio에 프로젝트가 로드되면 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성 테스트 탭에서 unittest 또는 pytest 프레임워크를 선택합니다.Once the project is loaded in Visual Studio, right-click your project in Solution Explorer and select the unittest or pytest framework from the Properties Test tab.

    참고

    pytest 프레임워크를 사용하는 경우 표준 pytest .ini 구성 파일을 사용하여 테스트 위치 및 파일 이름 패턴을 지정할 수 있습니다.If you use the pytest framework, you can specify test location and filename patterns using the standard pytest .ini configuration file. 기본적으로 작업 영역/프로젝트 폴더는 test_*py*_test.py 패턴으로 사용됩니다.By default, the workspace/project folder is used, with a pattern of test_*py and *_test.py. 자세한 내용은 pytest 참조 설명서를 참조하세요.See the pytest reference documentation for more details.

  3. 프레임워크를 선택한 후 프로젝트를 다시 마우스 오른쪽 단추로 클릭하고 추가 > 새 항목을 선택한 다음, Python 단위 테스트를 선택한 후 추가를 선택합니다.After the framework is selected, right-click the project again and select Add > New Item, then select Python Unit Test followed by Add.

  4. 이렇게 하면 표준 unittest 모듈을 가져오고, unittest.TestCase에서 테스트 클래스를 파생하며. 스크립트를 직접 실행하는 경우 unittest.main()을 호출하는 코드가 있는 test_1.py 파일이 만들어집니다.This action creates a test_1.py file with code that imports the standard unittest module, derives a test class from unittest.TestCase, and invokes unittest.main() if you run the script directly:

    import unittest
    
    class Test_test1(unittest.TestCase):
        def test_A(self):
            self.fail("Not implemented")
    
    if __name__ == '__main__':
        unittest.main()
    
  5. 필요한 경우 파일을 저장하고 테스트 > 테스트 탐색기 메뉴 명령을 사용하여 테스트 탐색기를 엽니다.Save the file if necessary, then open Test Explorer with the Test > Test Explorer menu command.

  6. 테스트 탐색기는 프로젝트에서 테스트를 검색하고 아래와 같이 표시합니다.Test Explorer searches your project for tests and displays them as shown below. 테스트를 두 번 클릭하면 해당 소스 파일이 열립니다.Double-clicking a test opens its source file.

    기본 test_A를 보여 주는 테스트 탐색기

  7. 프로젝트에 더 많은 테스트를 추가함에 따라 도구 모음의 그룹화 방법 메뉴를 사용하여 테스트 탐색기에서 보기를 구성할 수 있습니다.As you add more tests to your project, you can organize the view in Test Explorer using the Group By menu on the toolbar:

    테스트 탐색기 그룹화 방법 도구 모음 메뉴

  8. 또한 검색 필드에 텍스트를 입력하여 이름별로 테스트를 필터링할 수도 있습니다.You can also enter text in the Search field to filter tests by name.

unittest 모듈 및 테스트 작성에 대한 자세한 내용은 Python 2.7 설명서 또는 Python 3.7 설명서(python.org)를 참조하세요.For more information on the unittest module and writing tests, see the Python 2.7 documentation or the Python 3.7 documentation (python.org).

테스트 실행Run tests

테스트 탐색기에서 다양한 방법으로 테스트를 실행할 수 있습니다.In Test Explorer you can run tests in a variety of ways:

  • 모두 실행은 표시된 모든 테스트를 명확하게 실행합니다(필터 적용).Run All clearly runs all shown tests (subject to filters).
  • 실행 메뉴는 실패한 테스트, 성공한 테스트 또는 실행하지 않은 테스트를 하나의 그룹으로 실행하는 명령을 제공합니다.The Run menu gives you commands to run failed, passed, or not run tests as a group.
  • 하나 이상의 테스트를 선택하고 마우스 오른쪽 단추로 클릭한 후 선택한 테스트 실행을 선택합니다.You can select one or more tests, right-click, and select Run Selected Tests.

백그라운드에서 테스트가 실행되고, 테스트가 완료되면 테스트 탐색기에 각 테스트 상태가 업데이트됩니다.Tests run in the background and Test Explorer updates each test's status as it completes:

  • 성공한 테스트에는 녹색 틱과 테스트를 실행하는 데 소요된 시간이 표시됩니다.Passing tests show a green tick and the time taken to run the test:

    test_A 성공 상태

  • 실패한 테스트에는 빨간색 십자 표시와 콘솔 출력 및 테스트 실행의 unittest 출력을 보여 주는 출력 링크가 표시됩니다.Failed tests show a red cross with an Output link that shows console output and unittest output from the test run:

    test_A 실패 상태

    test_A 실패 및 이유

테스트 디버그Debug tests

단위 테스트는 코드 조각이므로 다른 코드처럼 버그가 있을 수 있으며 경우에 따라 디버거에서 실행해야 합니다.Because unit tests are pieces of code, they are subject to bugs just like any other code and occasionally need to be run in a debugger. 디버거에서 중단점을 설정하고 변수를 검사하며 코드를 단계별로 실행할 수 있습니다.In the debugger you can set breakpoints, examine variables, and step through code. Visual Studio는 단위 테스트에 대한 진단 도구도 제공합니다.Visual Studio also provides diagnostic tools for unit tests.

참고

기본적으로 테스트 디버깅은 Visual Studio 2017(버전 15.8 이상)에는 ptvsd 4 디버거를 사용하고 Visual Studio 2019(버전 16.5 이상)에는 debugpy를 사용합니다.By default, test debugging uses the ptvsd 4 debugger for Visual Studio 2017 (versions 15.8 and later) and debugpy for Visual Studio 2019 (versions 16.5 and later). ptvsd 3을 대신 사용하려면 도구 > 옵션 > Python > 디버깅레거시 디버거 사용 옵션을 선택할 수 있습니다.If you would like to instead use ptvsd 3, you can select the Use Legacy Debugger option on Tools > Options > Python > Debugging.

디버깅을 시작하려면 코드에 초기 중단점을 설정하고 테스트 탐색기에서 테스트(또는 선택 항목)를 마우스 오른쪽 단추로 클릭한 다음, 선택한 테스트 디버그를 선택합니다.To start debugging, set an initial breakpoint in your code, then right-click the test (or a selection) in Test Explorer and select Debug Selected Tests. 애플리케이션 코드의 경우처럼 Visual Studio에서 Python 디버거를 시작합니다.Visual Studio starts the Python debugger as it would for application code.

테스트 디버깅

선택한 테스트에 대한 코드 검사 분석을 사용할 수 있습니다.You can also use the Analyze Code Coverage for Selected Tests. 자세한 내용은 코드 검사를 사용하여 테스트할 코드 범위 결정을 참조하세요.For more information, see Use code coverage to determine how much code is tested.