2017-11-21 6 views
0

내가 가진이 같은 myfunc에 대한파이썬 유닛 테스트 - 객체 인스턴스에 대한 테스트를 작성

class MyClassA: 
    def __init__(...): 
     do some stuff 
     create object attributes 


def myfunc: 
    get required data 
    create MyClassA object(s) 
    store MyClassA object(s) in a list 
    return(list of MyClassA object(s)) 

지금은 쓰고 있어요 unittests : 나는 수 expected_result을 설정하는 일

import unittest 

class Test_myfunc(unittest.TestCase): 
    sample_data = ... 
    expected_result = ?? 
    self.assertEqual(myfunc(sample_data), expected_result) 

를? 테스트를 통과하려면 객체 목록이어야하지만 myfunc에 샘플 데이터를 전달할 때 만들어지는 동일한 인스턴스가 있어야합니다. unittest에 MyClassA의 다른 인스턴스를 만들면 인스턴스가 다르기 때문에 분명히 실패합니다. myfunc의 출력 목록에있는 각 객체에 대해 속성이 sample_data와 일치하는지 확인하고 싶습니다. 이 작업을 수행하는 올바른 방법은 무엇입니까?

추신 : 내 질문이 분명하기를 바랍니다.

답변

0

Test_myfunc에 과부하가 걸렸을 가능성이 있으므로 더 관리하기 쉬운 조각으로 나누는 것이 좋습니다.

예를 들어, 일부 테스트 케이스의 정의는 다음과 같을 수 있습니다

test_myfunc_returns_list 
test_myfunc_list_items_are_instanceof_MyClassA 
test_myfunc_contains_MyClassA_with_attributes 

아이디어는 실패가 이해하기 쉽게하고, 오류 메시지가 유익이되도록, 간단한 테스트 케이스를 유지하는 것입니다.

마지막 테스트는 개별 개체의 샘플 데이터가 있다고 주장 할 수있는 곳입니다. 원하는 경우 MyClassA 시나리오마다 다른 케이스를 사용하여 동일한 아이디어로 더 많은 정의를 작성할 수도 있습니다.

+0

@ Alex Forbes - 피드백에 감사드립니다. 예, 단위 테스트가 과부하 된 것처럼 보입니다. 더 작은/더 간단한 테스트로 나눌 것입니다. – kronosjt

1

예기치 않은 결과와 결과에 구별 인스턴스가 포함되어있어 이 같음 인스턴스 만 포함되어 있어도 상관 없습니다. myfunc을 만들려는 인스턴스를 수동으로 만들고 해당 클래스가 적절한 정의가 __eq__ 인 지 확인하여 비교하십시오.

+0

저에게 도움이 된 @chepner에게 감사드립니다. – kronosjt