2013-10-17 2 views
1

가장 관용적 인 것은 무엇입니까? (할 수있는 한 가지 방법은 바람직합니다.)) 반복 가능한 인스턴스에서 무언가가 발생한다고 단언하는 방법 정확히 카운트 번? 나는 아래에 묘사 된 행동을 달성하고 싶다.카운트가있는 assertIn

checked = 'pum-pum-pata-pum' 

#something like this 
self.assertIn('pum', checked, count=3) # OK 
self.assertIn('pum', checked, count=2) # Error 
self.assertIn('pum', checked, count=4) # Error 

나는 장고 assertContains이 능력을 가지고 있지만 그것은 당신이 반응이 있음을 주장한다.

답변

2

당신이 목록 또는 튜플을 처리하는 경우, 내 생각 엔 가장 관용적 방법이 또한 element는 단일 문자가 아닌 경우를 포함하여, 문자열에서 작동

assert iterable.count(element)==number 

것입니다 -하지만, 틀림없이, 이것은 문자열의 요소가 문자이기 때문에 "반복 가능한 인스턴스에서 정확히 무엇인가가 발생하는 횟수를 정확하게 계산"하지 않습니다. 일반적인 반복 가능 객체에

, 당신은 람다와 지능형리스트 또는 필터를 사용할 수 있습니다

assert len([e for e in iterable if e==element]) == number 
assert len(filter(lambda e:e==element, iterable)) == number 

나는 첫 번째 옵션은 대부분의 사람들에게 깨끗한 생각합니다.

+0

+1하지만 해결책은 문자열 문제를 해결하지 못합니다. 내 코드 샘플로 무엇을 제안합니까? – kharandziuk

+1

@kharandziuk'count' 메소드는 문자열에도 존재합니다. 나는 이것을 명확히하기 위해 답을 편집했다. – goncalopp

관련 문제