2017-05-19 17 views
-2

Python3에서 단위 테스트를하고 있지만 print()가 작동하지 않는 것 같습니다. Python3 UnitTests : stdout으로 출력하는 방법

python \interpreter.py 

단위 테스트를 실행

가, 렉서 내부 인쇄() 문()가 무시됩니다 : 내가 사용 내 코드를 실행

import unittest 

def lexer(line): 
     ... #Lots of code and print statements here 
    return tokens 

class lexerBasicTestCases(unittest.TestCase): 
    def Test1(self): 
     test = "9+4" 
     output = ["9", "+", "4"] 
     self.assertEqual(lexer(test), output) 
    def Test2(self): 
     test = "9 + 4" 
     output = ["9", "+", "4"] 
     self.assertEqual(lexer(test), output) 
    def Test2(self): 
     test = "9 + 4" 
     output = ["9", "+", "4"] 
     self.assertEqual(lexer(test), output) 

def lexerBasicTestSuite(): 
    suite = unittest.TestSuite() 
    suite.addTest(lexerBasicTestCases('Test1')) 
    suite.addTest(lexerBasicTestCases('Test2')) 
    suite.addTest(lexerBasicTestCases('Test3')) 
    unittest.TextTestRunner(verbosity=2).run(suite) 

#Main program 
lexerBasicTestSuite() 

:

여기 내 코드의 조각이다. 테스트 케이스가 실패하고 분석 할 인쇄 문이 없을 때 이것은 실망 스럽습니다. 디버깅 할 때 단위 테스트를 주석 처리하지 말고 인쇄 문에 대한 테스트를 단독으로 실행하는 대응 함수를 작성하십시오. 인쇄 명세서를 어떻게 인쇄 할 수 있습니까?

+1

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. 게시 된 코드를 텍스트 파일에 붙여넣고 설명한 문제를 재현 할 수 있어야합니다. 대신 문제 코드를 제거하고 * 불필요한 코드를 유지합니다. – Prune

+1

기능을 인쇄하는 기능을 원하지 않습니다. 당신이 원하는 것은 단위 테스트가 함수로부터 리턴 값을 체크하도록하는 것입니다. 프로덕션 코드를 실행하는 동안 반환 값을 인쇄하는 다른 함수를 쉽게 가질 수 있습니다. 단위 테스트를 실행하는 동안 인쇄는 아니오입니다. – quamrana

+1

로깅 모듈을 사용할 수 있습니다. 도움이 될 수 있습니다. - https://stackoverflow.com/questions/284043/outputting-data-from-unit-test-in-python – Shashank

답변

0

단위 테스트는 병렬로 실행되므로 스레드 기능이 안전하지 않으므로 인쇄 기능에 의존 할 수 없습니다. 대신에 로거를 사용하거나, 커스텀 메시지를 assert 메서드에 더 잘 전달하십시오.

class lexerBasicTestCases(unittest.TestCase): 
    def Test1(self): 
     """ 
     Docstrings are printed in most test runners. 
     """ 
     test = "9+4" 
     expect = ["9", "+", "4"] 
     failure_msg = 'lexer({0}) should return {1} but returned {2}' 
     actual = lexer(test) 
     self.assertListEqual(expect, actual, failure_msg.format(test, expect, actual))