2016-08-27 3 views
0

프로젝트를 테스트하기 위해 파이썬에서 unittest를 사용하고 있습니다. 이 프로젝트는 다른 파이썬 개발자가 서브 클래스로 사용할 클래스를 정의합니다. 그런 다음 프로젝트를 실행하고 사용자가 작성한 하위 클래스를 활용할 수 있습니다.파이썬 클래스 메소드 내 테스트하기

하위 클래스의 메서드가 프로젝트에서 올바른 데이터를 전달하고 있는지 테스트하고 싶습니다. 어떻게해야합니까? 프로젝트에서 서브 클래 싱중인 테스트 클래스 내에서 unittest.TestCase.assert* 메소드를 호출하는 것은 간단하지 않습니다.

TestCase 개체를 전역 변수로 설정하고 서브 클래스 메서드 내에서 TestCase 개체의 어설 션 메서드를 호출했지만 전역 변수가 테스트 클래스 메서드의 범위 내에서 정의되지 않은 것 같습니다.

import unittest 
import myproject 


class TestProjectClass(unittest.TestCase): 
    def test_within_class_method(self): 
     myproject.run(config_file_pointing_to_ProjectClass)  # Calls SomeUsersClass.project_method() 


class SomeUsersClass(myproject.UserClassTemplate): 
    def project_method(self, data_passed_by_project): 
     #want to test data_passed_by_project in here 
     pass 
+0

테스트를 어떻게 실행합니까? 어떤 테스트 러너 클래스를 사용하고 있습니까? – XORcist

+0

테스트는 PyCharm 'tedting.py의 유닛 테스트 실행'에 의해 실행되며 정확히 어떻게 수행되는지는 분명하지 않습니다. – Shaun

+0

질문이 명확하지 않습니까? 나는 더 많은 대답을 기대했을 것입니다. – Shaun

답변

0

. 사용자 정의 예외는 테스트해야하는 모든 데이터로 압축 될 수 있습니다. 여기에 표시하지 않지만 test_helper.py은 베어 뼈 하위 클래스 Exception입니다. 사용자의 클래스 내에서 생성 된 예외의 인스턴스가 사용자 정의 예외의 인스턴스로 확인되지 않았기 때문에

import unittest 
import myproject 
from test_helper import PassItUpForTesting 


class TestProjectClass(unittest.TestCase): 
    def test_within_class_method(self): 
     try: 
      # The following line calls SomeUsersClass.project_method() 
      myproject.run(config_file_pointing_to_ProjectClass) 
     except PassItUpForTesting as e: 
      # Test things using e.args[0] here 
      # Example test 
      self.assertEqual(e.args[0].some_attribute_of_the_data, 
          e.args[0].some_other_attribute_of_the_data) 


class SomeUsersClass(myproject.UserClassTemplate): 
    def project_method(self, data_passed_by_project): 
     #want to test data_passed_by_project in here 
     raise PassItUpForTesting(data_passed_by_project) 

는 (동일한 파일 내에서 사용자 정의 예외를 정의하는 몇 가지 이유를 들어 작동되지 않았다. 검사를의 sys.exc_*을 통해 예외가 발생하면 예외 유형이 다르게 나오므로 다른 모듈에 예외를 넣고 가져 와서 작동합니다.