FixtureFixture는 테스트가 시작하기 전 필요한 인자를 제공하거나, 상태를 정의하는데 사용한다. 예를 들어 다음과 같은 역할에 사용할 수 있다. SUT를 생성과 협력 관계의 인스턴스를 미리 설정된 조건으로 생성하고 제공한다. SUT, 혹은 통제할 수 없는 외부 인스턴스의 행동을 미리 지정한다. (Mocking 형태) Basic Fixture 생성해보기class Fruit: def __init__(self, name): self.name = name def __eq__(self, other): return self.name == other.name@pytest.fixturedef fruit_apple(): return Fruit('apple')@pytest..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item40 요약 파이썬에서는 부모 클래스가 자동으로 초기화 되지 않는다. 다중 상속보다는 믹스인 클래스로 합성해라. 다중 상속을 사용할 경우, 메서드의 실행 순서는 mro를 따른다. (Class.mro() 호출한 순서대로 메서드가 호출됨). [부모 클래스].__init__()를 이용해 직접 부모 클래스를 초기화 할 수 있다. mro 순서와는 다르게 부모 클래스가 초기화 됨. (개발자에게 혼란을 가져옴) 이렇게 할 경우, 다이아몬드 상속에서 부모 클래스가 여러 번 초기화 된다. (개발자에게 혼란을 가져옴) 부모 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item66 요약 contextlib.contextmanager 데코레이터를 이용하면 __enter__, __exit__ 구현없이 with 절에서 사용할 수 있음. with 절은 with절 블록 안과 밖을 격리시키는 역할을 함. 다음 의미를 가짐. With절 안쪽은 특별한 Context를 가지고 실행됨을 의미함. With절 안 / 밖은 서로 다른 Context에서 실행됨. contextmanager 데코레이터를 사용한다면, try ~ finally와 yield를 함께 사용해줘야 함. contextmanager를 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item37 요약 딕셔너리, 긴 튜플이 여러 Depth로 내포되는 경우 클래스로 분리해 가독성 확보, 캡슐화를 하는 것이 필수다. Item 37. 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라. 파이썬은 딕셔너리 타입을 제공해준다. 딕셔너리에는 동적으로 Key / Value를 추가할 수 있다. 이것은 편리함도 있지만, 문제점을 가져오기도 한다. 딕셔너리를 사용할 때 고려해야할 점을 살펴보자. 딕셔너리는 동적으로 손쉽게 Key / Value를 추가할 수 있다. 따라서 확장이 쉽다. 쉬운 확장 때문에 여..
참고 https://docs.python.org/ko/3.11/whatsnew/3.11.html TypedDict에 Required / Non-Required 인자 추가 from typing import TypedDict, Required, NotRequired class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars"} # OK (year is not required) m3: Movie = {"year": 2022} # ERROR (missing required field title) 타입 힌트를..