[컴][파이썬] vscode 에서 파이썬 유닛테스트 설정

visual studio code vs code 에서 유닛테스트 / 간략한 파이썬 유닛테스트 사용법 / python unittest mock up


Vscode 에서 Unittest 실행

Python Unittest

unittest 를 작성하는 방법은 ref. 2 를 참고하면 된다.


sys.path 추가

여기서 directory structure 는 아래처럼 되어 있다.
- workspace
     |
     +--------- src
     |
     +----------test

그래서 unittest 에서 필요한 module 을 import 할 때 sys.path를 추가해줘야 한다.
import os
import sys
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)),  '..', '..'))



vscode 에서 unittest 를 실행

아래처럼 Workspace 의 settings.json 을 설정해 주자.

workspace settings.json

{
    ...
    "python.unitTest.unittestEnabled": true,
    "python.unitTest.unittestArgs": [
        "-v",
        "-s", "test",
        "-p", "*.py"
      ],
}

  • -s 는 test 들이 있는 곳의 root folder 이다.
  • -p 는 test python file 의 이름에 대한 pattern 을 설정해 준다.

설정이 제대로 되면 unittest 를 vscode 가 알아서 찾아준다. 그러면 아래처럼 Run Test 가 표시된다.
참고로 강제로 찾게하는 것은 아래 그림에서 보이는 'Run Tests' 부분을 눌러서 'Discover Unit Test' 를 할 수도 있다.

error message

참고로, vscode 에서 보여주는 error message 는 이유를 제대로 표현하지 못한다. 내경우에는 virtualenv 에 필요한 module 들이 설치되지 않았었는데, 그에 해당하는 error 를 제대로 보여주지 못했다.

그러므로 먼저 unittest 를 그냥 python 으로 실행해보고 잘 동작하면 그 이후에 vscode 의 run test 를 이용하면 하는 것이 낫다고 생각한다.



Mockup

python 3.3 에서 부터 unittest mock up 이 standard library 에 추가됐다. 사용법은 어렵지 않다. 아래 글을 참고하자.

유용한 함수들

  • MagicMock : mockfunc = MagicMock(return_value=3) 으로 mockfunc() 을 호출하면 무조건 return 값이 3으로 나오게 할 수 있다.
  • assert_called_with  : assert_called_with 로 함수가 호출될때 어떤 parameter 를 받는지에 대한 test 를 할 수 있다.


import unittest
from unittest.mock import MagicMock
from unittest.mock import ANY

import myproj.FileMailer

class TestFileMailer(unittest.TestCase):

    def setUp(self):
        
        self.fmailer = FileMailer(os.path.abspath(__file__))
        self.fmailer.sendThruSendMail = MagicMock(return_value=3)

   def test_send(self):
        htmlMessage = '<html></html>'
        subj = 'test1'
        expSubj = "[새로운] 'test1' 의 메일제목."
        
        self.fmailer.send(
            'ga@gamil.com',
            info={'title': subj}
        )
        self.fmailer.sendThruSendMail.assert_called_with(ANY, expSubj)




References

  1. Unit Testing Python in Visual Studio Code
  2. 26.4. unittest — Unit testing framework — Python 3.6.3 documentation

댓글 없음:

댓글 쓰기