Header

  1. View current page

    장환's

Profile_img_60x60_01
17

tester.vim

tester.vim - so you can test and fix more easily in Vim

tester.vim은 python 프로그래밍 도중 소스 코드와 테스트 파일 사이를 쉽게 오가고 테스트를 한번에 할 수 있도록 해주는 Vim plugin 입니다.

tester.vim은 vim으로 TDD를 더 손쉽게 해주기 위해 개발하였습니다. (개발 스토리 보러 가기)

 

소스 코드도 보랴 테스트 코드 보랴, 또 테스트까지 실행하랴 번거로우시죠?

 

tester.vim에서는
vim의 make 기능을 활용하여 vim 자체에서 test를 실행하고 결과를 quickfix list에 보여주는 것은 물론,
소스 코드와 테스트 코드 사이를 자유롭게 오갈 수 있는 기능을 제공합니다.

 

설치법

아직 설치는 생각을 안해봤네요. 뭐 vim script가 별거 있겠어요?

다운로드는 여기서 받으세요:  http://github.com/jangxyz/tester.vim

 

사용법

덧셈을 하는 python 코드를 TDD로 개발한다고 합시다.

먼저 테스트 코드:

  1. # test/add_test.py
  2. import unittest
  3. import add
  4. class AdditionTestCase(unittest.TestCase):
  5.     def test_add_takes_two_arguments_and_return_the_sum(self):
  6. x, y = 3, 2
  7.         self.assertEqual(add.add(x,y), x+y)
  8.  
  9. def test_add_can_take_multiple_arguments(self):
  10.     self.assertEqual(add(1,2,3,4,5), 15)

 

그리고 소스 코드:

  1. # add.py
  2. def add(*args)
  3.     return sum(args)
  4. end

 

테스트를 작성하고, 코드를 만들고 실행하는 단계를 거치려면 보통 여러개의 화면과 테스트를 실행하기 위한 쉘도 띄워야 합니다.

Vim에서는 기본적으로 make 명령을 이용해 별다른 쉘을 띄우지 않고 사용할 수 있게 해줍니다.

tester.vim을 이용하면 하나의 Vim 화면에서 3가지 작업을 모두 할 수 있습니다.

 

먼저, add.py가 떠 있을 때,

:T를 입력하면 테스트 파일인 add_test.py 파일로 이동합니다.

여기서 다시 :T를 입력하면 add.py로 돌아옵니다. 이 때, 언제 갔었냐는 듯 떠나기 전에 저장돼 있던 위치 그대로 돌아옵니다.

 

이번에는 add.py 파일에서 :TT를 눌러볼까요?
AdditionTestCase에 있는 두 메소드 test_add_takes_two_arguments_and_return_the_sum()와 test_add_can_take_multiple_arguments()가 모두 테스트됩니다.

그런데 저런! 에러가 있군요. 이때 quickfix list가 열리면서 에러가 표시되고, 어느새 화면은 정확하게 에러가 난 곳으로 이동해 있습니다.
에러를 고치고 다시 :TT 명령을 내리니 이번에는 그 테스트 하나만 수행하고 OK가 나는군요 

테스트 코드에서 :TT를 입력하면 현재 줄이 있는 테스트 메소드 하나만 검사하고(테스트 메소드 안에 있지 않으면 여러개를 수행하겠죠).
소스 코드에서 :TT를 입력하면 테스트 코드로 이동해서 해당 줄에 맞는 테스트 메소드를 검사합니다.

 

만약 모든 테스트를 돌고 싶으면, :TA를 눌러보세요. tester.vim이 찾을 수 있는 범위 내에서 모든 테스트를 돌려보려고 시도합니다.

 

기능

  • :T 명령어도 손쉬운 소스 코드 <-> 테스트 코드 간 이동
  • :TT 명령으로 테스트 코드 실행
  • :TA 명령으로 모든 테스트 코드 실행 (makeprg이 설정돼 있어야 합니다)
  • :TA!, :TT! 지원(make와 make! 차이 - 에러가 발견되면 그리로 이동하느냐 마느냐)
  • 에러 결과는 QuickFix list에 표시

 

주의점

  • 현재는 python용으로 제작되었습니다.
  • 테스트 파일을 찾는 방법은 사람마다 다를 수 있습니다.
    이 정보는 tester.vim 파일 내부에 s:test_directory, s:test_filename_prefix, s:test_filename_suffix에 저장돼 있습니다.

    • 기본적으로 ./test 디렉토리에 _test.py로 끝나는 파일을 테스트 파일로 간주합니다. (예: ./add.py 의 테스트 파일은 ./test/add_test.py)

      • s:test_directory = "test"
      • s:test_filename_prefix = ""
      • s:test_filename_suffix = "_test"
    • 같은 디렉토리에 "test_"로 시작하는 파일로 바꾸고 싶다면 (예: ./test_add.py) 다음과 같이 고치면 됩니다:

      • s:test_directory = ""
      • s:test_filename_prefix = "test_"
      • s:test_filename_suffix = "test"
  • 테스트 코드에서 :TT 명령시 하나의 테스트만 실행하는 기능에는 주의할 점:

    • 현재는 줄 단위로 메소드와 클래스 검사를 하게 돼 있습니다. 블록주석 안에 메소드가 들어 있다 하더라도 오인할 겁니다.

      • 메소드 검사 패턴: def test어쩌구(self):
      • 클래스 검사 패턴: class 어쩌구(unittest.TestCase):
    • 소스 코드에서 누르면, 먼저 테스트 코드로 이동해서 위치해 있는 줄에 해당하는 테스트 메소드를 찾습니다. 이동한 적이 없으면 전체 테스트를 실행할 가능성이 높습니다.
  • 전체테스트(:TA) 명령시 주의할 점

    • 기본적으로 모든 테스트 코드들이 어디에 있을지 짐작하긴 어렵습니다. makeprg 옵션에 전체를 테스트할 수 있는 프로그램을 알려주세요.
    • 없으면, Integration with Python PyUnit testing framework 문서에 나와 있는 범용 alltests.py 파일을 실행합니다. 테스트 파일 이름짓는 방식에 따라 찾지 못할 수도 있습니다.

 

Change

  • 소스 코드에서도 :TT를 입력하면 하나의 테스트 메소드만 실행할 수 있도록 작동 방식을 변경했습니다. (2009.3.29)

 

 

Tags

History

Last edited on 03/29/2009 11:21 by 장환

Comments (0)

You must log in to leave a comment. Please sign in.