2014-05-09 2 views
0

테스트 목적으로 특정 필드가있는 빈 개체와 같은 것을 만들어야합니다. 내가 예에 의해 명확히하자 원하는 필드로 '빈'개체를 만드는 방법

현재 구조가 : 'this_has_to_be_object'가 일부 필드 및 설정 값을 추가 할 수있는에 실제 객체가 될 수 있도록

var = { 
    'blas': { 
     'bla':  0.250, 
     'bla1':  0.300, 
     'bla2': 6, 
     ... 
    }, 
    'somth1': self.smth1, 
    'something': [ 
     { 'h1': 66.00 }, 
     { 'h2': 47.00 }, 
     { 'h3': 85.00 }, 
     { 'h4': 32.00 }, 
     { 'h5': 34.00 } 
    ], 
    'this_has_to_be_object'.field: 1 
} 

내가 원하는 건입니다. 이러한 동작의 목적은 'this_has_to_be_object'.field으로 작동하는 다른 함수를 테스트하는 것입니다.

+0

빈 사전이나 그 값을 작성하지 않는 이유는 무엇입니까? 또는 키 대신 임의의 속성을 지원하는 무언가가 필요합니까? –

+1

테스트 용 코드로 보낼 더미 데이터를 생성하는 것 같습니다 ("테스트 목적으로 ..."). – RemcoGerlich

답변

1

가 변경할 수없는 경우 Namedtuples이 길에 있습니다

from collections import namedtuple 

MyTupleType = namedtuple('MyTupleType', ['field']) 

yourobject = MyTupleType(field=3) 

print(yourobject.field) # prints 3 

를이 테스트의 경우, 모의 라이브러리를 사용하여도입니다 편리하다 (http://www.voidspace.org.uk/python/mock/ 참조, unittest.mock은 파이썬 3.3 이후 표준 라이브러리의 일부이다). yourobject

yourobject = MagicMock() 
yourobject.field = 3 

참고 이제 당신이 그것에 액세스하려고 어떤 필드 나 메소드 있으며, 그 값은 모든 또 다른 MagicMock 인스턴스입니다. 그것은 매우 강력한 단위 테스트 도구입니다.

은 마지막으로 당신은 지루한 더미 클래스를 생성 할 수 있습니다 : 당신이 you want to add some field inside 말했다 경우처럼 할 수있는이 이미 객체이다

class Dummy(object): 
    pass 

yourobject = Dummy() 
yourobject.field = 3 
+0

대단히 감사합니다! 나는 MagickMock()을 내 문제의 해결책으로 삼았다. –

1
class TestData(object): 
    def __init__(self, **dict): 
     self.__dict__.update(dict) 

var = { 
    'blas': { 
     'bla':  0.250, 
     'bla1':  0.300, 
     'bla2': 6, 
    }, 
    'somth1': 2, 
    'something': [ 
     { 'h1': 66.00 }, 
     { 'h2': 47.00 }, 
     { 'h3': 85.00 }, 
     { 'h4': 32.00 }, 
     { 'h5': 34.00 } 
    ], 
    'this_has_to_be_object': TestData(field=1) 
} 

그래서 :

>>> var['this_has_to_be_object'].field 
1 
+0

'this_has_to_be_object '는 OP 샘플의 문자열입니다. 나는 * OP가'var [ 'this_has_to_be_object']. field '가 작동하기를 원한다고 생각합니다. 질문에 대한 주석을보십시오. 나는'this_has_to_be_object.field'를 키로 결정하는 것이 그들이 원하는 것이 아니라는 것을 확신합니다. –

+0

아, 그래. 편집 됨. – rogual

+0

유용한 조언을 보내 주셔서 감사합니다. 나는 그것이 시험이기 때문에 MagickMock()으로 길을 선택했습니다. –

1
var = { 
'blas': { 
    'bla':  0.250, 
    'bla1':  0.300, 
    'bla2': 6, 
    ... 
}, 
'somth1': self.smth1, 
'something': [ 
    { 'h1': 66.00 }, 
    { 'h2': 47.00 }, 
    { 'h3': 85.00 }, 
    { 'h4': 32.00 }, 
    { 'h5': 34.00 } 
], 
'this_has_to_be_object':{'field': '1'} 

}

...this_has_to_be_object.newField = 3; 

이 원하는 게 아니겠습니까?

+0

예, 감사합니다. 정확히 내가 알고 싶었던 것입니다. –

1

을 사용하지 않는 이유 기본값 사전 here.e.g.

var = defaultdict(int) 

var.update({ 
    'blas': { 
     'bla':  0.250, 
     'bla1':  0.300, 
     'bla2': 6, 
     ... 
    }, 
    'somth1': self.smth1, 
    'something': [ 
     { 'h1': 66.00 }, 
     { 'h2': 47.00 }, 
     { 'h3': 85.00 }, 
     { 'h4': 32.00 }, 
     { 'h5': 34.00 } 
    ], 
    'this_has_to_be_object'.field: 1 
} 
) 

이제 VAR [ '아무것도'] 항상 내가 그건 당신이 테스트를, 오른쪽에 필요한 기능 추측 0

로 반환?

+0

그렇게 보입니다. MagickMock을 솔루션으로 선택했습니다. MagickMock이 더 적합하기 때문입니다. 고맙습니다! –

관련 문제