2013-08-29 3 views
0

나는 꽤 일반적인 질문이되기를 바랍니다. XML 파일을 테스트하고 특정 태그의 유효성을 검사합니다. 태그 검사 코드를 재사용하려고하므로 각 필드의 코드를 다시 작성하고 싶지 않습니다. 그러나 이렇게하려고 할 때python 테스트 케이스 클래스를 재사용하는 방법

여기 UnitTest Framework를 사용하려고하는 "ValidateField"클래스가 있습니다. 사용하려고 시도하는 코드입니다. 나는 단순히 다음과 같이 그것을 호출하려고 노력하고있다. 내가 얻은 것은 유닛 테스트 프레임 워크가 0 테스트를 실행했다는 것입니다. 나는 클래스 내에서 재사용을 시도하지 않고있는 유닛 테스트 프레임 워크를 다른 곳에서 성공적으로 사용하고있다. 지금 내가 누락 된 곳이면 누구나? 여기

출력 내가 얻을 수있다 : 여기

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 

---------------------------------------------------------------------- 

내가 재사용 가능한 클래스가 사용하는 재사용 가능한 클래스 다음

import Common.ValidateField 


class Tests(): 
    def test_testCreated(self): 
     validate = Common.ValidateField.ValidateField() 
     validate.test_field('./created') 

로 통화를하고있는 클래스/메소드입니다 단위 테스트 프레임 워크.

import unittest 
import Main 
import Common.Logger 


class ValidateField(unittest.TestCase): 
    def test_field(self, xpath): 
     driver = Main.ValidateDriver().driver 
     logger = Common.Logger.Logger 
     tag = [] 

    for t in driver.findall("'" + xpath + "'"): 
     tag.append(t) 

    # Test to see if there is more than one tag. 
    if len(tag) > 1: 
     self.assertTrue(False, logger.failed("There is more than one " + "'" + t.text + "'" + " tag.")) 
    else: 
     # Test for a missing tag. 
     if len(tag) <= 0: 
      self.assertTrue(False, logger.failed("There is no " + "'" + t.text + "'" + " tag.")) 
      # Found the correct number of tags. 
     self.assertTrue(True, logger.passed("There is only one " + "'" + t.text + "'" + " tag.")) 

    # Test to make sure there is actually something in the tag. 
    if t.text is None: 
     self.assertTrue(False, logger.failed("There is a " + "'" + t.text + "'" + " tag, but no value exists")) 
+0

테스트를 어떻게 실행하고 있습니까 (이 경우에는 실행하지 않고 있습니까)? – geoffspear

답변

0

당신이 unittest.TestCase에서 상속하지 않는 "재사용 가능한 클래스"를 사용하고, 그래서 테스트 러너에 의해 선택되지 않습니다 클래스입니다. 대신 당신은 "재사용 가능한 클래스"를 상속 받고 있습니다.

하나의 가능한 해결책은 주 클래스를 재사용 가능한 클래스의 하위 클래스로 만들고 self을 통해 일반적인 방법을 참조하십시오. 물론 접두어가 test_ 인 것처럼 다른 방법으로 이름을 지정해야합니다. 러너는 테스트 자체라고 생각하고 실행하지 않으려 고합니다. 따라서 :

from common import ValidateField 

class Tests(ValidateField): 
    def test_testCreated(self): 
     self.field_test('./created') 
+0

감사합니다. Daniel. 원래 unittest.TestCase에서 상속 받았는데 여기서 "재사용 가능한 클래스"를 사용하려고했습니다. 그러나이 작업을 시도 할 때마다 테스트를로드 할 수없고 다음 오류가 발생합니다. – user2643864

+0

추적 (가장 최근 호출 마지막) : 파일 "C : \ Users \ sharmon \ PycharmProjects \ DriverValidator \ Tests \ "C : \ Python27 \ lib \ unittest \ case.py"파일, 줄 191, __init__에서 ("./ 만든")return validate.ValidateField(). test_field ('./ 만든') 줄 "TestCreated.py" self .__ class__, methodName)) ValueError : <클래스 '의 테스트 메소드가 없습니다. Common.ValidateField.ValidateField'> : runTest --------------------- ------------------------------------------------- 0에서 RAN 1 테스트.001s FAILED (errors = 1) – user2643864

+0

그런 다음 내가 "재사용 가능한 클래스"에서 상속 받았을 것이라고 생각했지만 다음 오류가 발생합니다. 추가 정보를 제공 할 수 있는지 알려주세요. 일반적인 수입 ValidateField에서 클래스 테스트 (ValidateField) : 데프 create_test (자기) : 의 validate = self.ValidateField() validate.field_test ('./ 만든')는 ValidateField을 상속하는 경우, 당신은 돈 – user2643864

0

들여 쓰기에 문제가있는 것 같습니다. test_field 메서드의 정의를 살펴보면 첫 번째 세 개의 문만 올바르게 들여 쓰여지고 test methd의 정의 안에있는 것으로 나타납니다. 나머지 코드는 test_function 본문의 바깥에 있으므로 아무 것도 주장하지 않을 것입니다.

이것은 아마도 test_field 함수 내에서 테스트 할 것이 없으므로 0 번 테스트를 보는 이유 일 수 있습니다.

들여 쓰기를 수정하여 나머지 코드도 모두 test_function의 정의 아래에 나타나는지 확인하십시오. 다행히도, 그것이 효과가있다, 그렇지 않으면 우리는 다시 한번 살펴볼 것이다.

+0

감사합니다 Prahalad. 이 포럼에 코드를 붙여 넣을 때 들여 쓰기가 정확하지 않습니다. 그러나이 정의에 따라 들여 쓰기가 적절합니다. – user2643864

관련 문제