Python 코드에 대해 단위 테스트 설정Setting 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 topic 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. 또한 비디오 Python 테스트(Microsoft Virtual Academy, 2m31s)를 참조하세요.Also see the video Testing Python (Microsoft Virtual Academy, 2m31s).

테스트 검색 및 보기Discovering and viewing tests

규칙에 따라 Visual Studio는 이름이 test로 시작하는 메서드로 테스트를 식별합니다.By convention, Visual Studio identifies tests are 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. 필요한 경우 파일을 저장한 다음 테스트 > 창 > 테스트 탐색기 메뉴 명령으로 테스트 탐색기를 엽니다.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.4 설명서(python.org)를 참조하세요.For more information on the unittest module and writing tests, see the Python 2.7 documentation or the Python 3.4 documentation (python.org).

테스트 실행Running 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 rick 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 실패 및 이유

디버깅 테스트Debugging 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.

테스트 디버깅

Visual Studio 버전에 따라 선택한 테스트에 대한 코드 검사 분석테스트 프로파일링 명령도 사용할 수 있습니다(기능 매트릭스 참조).You can also use the Analyze Code Coverage for Selected Tests and Profile Test commands, depending on your version of Visual Studio (see the Features matrix).

알려진 문제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 stop debugging.