2014-04-29 4 views
0

콘솔에 예쁜 색상을 적용 할 수 있도록 작은 콘솔 래퍼를 쓰고 있습니다. 내가 사용하는 모듈의 삭감 버전은 여기에 있습니다 :모의, 가져 오기 및 적용

from sys import stderr 
try: 
    from fabulous.color import fg256 
    clog = lambda x: stderr.write(
     str(fg256(63, u'\u26A0 ' + str(x).encode('utf-8') + '\n').as_utf8)) 
except ImportError: 
    _green = '\033[1;32m' 
    _default = '\033[1;m' 
    clog = lambda x: stderr.write(_green + 
            u'\u26A0 ' + 
            str(x).encode('utf-8') + 
            _default + 
            '\n') 

내가 쉽게 from mycolour improt clog을 사용하는 일부 단위 테스트 및 멋진 여부의 존재에 따라 뽑힐 것이다 clog의 올바른 버전을 작성할 수 있습니다. 그러나 λ람다가로드되면 언로드 할 수 없습니다. 따라서 코드의 두 경로를 테스트 (py.test를 통해)하려는 시도는 두 번째 테스트에서 실패합니다.

어떻게하면 100 % 테스트 커버리지를 얻을 수 있습니까?

try: 
    import builtins 
except ImportError: 
    import __builtin__ as builtins 
import unittest 
from mock import MagicMock 
from mock import patch 
from mock import call 


class ColourFabulousTest(unittest.TestCase): 

    def setUp(self): 
     pass 

    @patch('mycolours.stderr') 
    def test_fabulous_clog(self, err): 
     from mycolours import clog 
     err.write = MagicMock() 
     clog('ook') 
     self.assertTrue(err.write.called) 
     self.assertEqual([call('\x1b[38;5;63m\xe2\x9a\xa0 ook\n\x1b[39m')], 
         err.write.call_args_list) 

    def tearDown(self): 
     pass 


class ColourANSITest(unittest.TestCase): 

    def setUp(self): 
     self.realimport = builtins.__import__ 
     def myimport(name, globals, locals, fromlist, level=0): 
      if name == 'fabulous.color': 
       raise ImportError 
      return self.realimport(name, globals, locals, fromlist, level) 
     builtins.__import__ = myimport 

    def test_ansi_clog(self): 
     from mycolours import clog 
     builtins.__import__ = self.realimport 
     with patch('mycolours.stderr') as err: 
      clog('ook') 
      self.assertTrue(err.write.called) 
      self.assertEqual([call(u'\x1b[1;32m\u26a0 ook\x1b[1;m\n')], 
          err.write.call_args_list) 

    def tearDown(self): 
     builtins.__import__ = self.realimport 
+1

왜 -1 ...? ... – Sardathrion

답변

1

tearDown() 방법이 추가 :

try: 
    del sys.modules['mycolours'] 
except KeyError: 
    pass 

this보고 this 더 일반적인 질문을 가지고

여기에 내가 가지고있는 테스트 스크립트입니다.

관련 문제