테스트만이 살길이다

2024년 8월 16일 금요일

Today I Learned

날짜

2024년 8월 16일 금요일

내용

테스트케이스 추가

무려 6개월 전에 진행했던 리스트 디자이너의 테스트 케이스를 추가해줬다. 허허.. 진작에 좀 부지런하게 해놓을껄.. 코드는 이렇다

  • 코드(장문주의)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
      class TestListDesigner:
          # 리스트디자이너 위젯 관리 테스트
          @pytest.mark.parametrize(
              "template, filter",
              [
                  (template, filter)
                  for template in ListDesignerPreset
                  for filter in ListDesignerPreset
              ],
          )
          # 리스트디자이너 위젯 생성 테스트
          def test_create_list_designer_widget(self, template, filter):
              with TestingSessionWriteLocal() as db:
        
                  set_factory_session(db)
                  shop = factory_shop()
                  db.commit()
        
                  # ... 위젯 생성 로직 ...
        
                  assert widget
                  db.rollback()
        
          # 리스트디자이너 위젯 업데이트 테스트
          def test_update_list_designer_widget(self):
              with TestingSessionWriteLocal() as db:
                  set_factory_session(db)
                  shop = factory_shop()
        
                  # ... 생성된 위젯 조회 로직 ...
            
                  modify_list_designer_widget(data=data, shop=shop, db=db)
        
                  # ... 변경한 위젯 조회 로직 ...
    
                  assert updated_widget.design_option["title"] == "updated_title"
        
          # 리스트디자이너 위젯 내 상품 순서 변경 테스트
          def test_update_list_designer_products_indices(self):
              with TestingSessionWriteLocal() as db:
                  set_factory_session(db)
                  shop = factory_shop()
        
                  stmt = select(models.ListDesignerWidget)
                  widget = db.execute(stmt).scalars().first()
        
                  # ... 위젯 내 상품 조회 로직 ...
        
                  new_list_designer_products = random.sample(
                      list_designer_products, len(list_designer_products)
                  )
        
                  # ... 변경한 위젯 조회 로직 ...
        
                  assert updated_list_designer_products == list_designer_products
        
          # 리스트 디자이너 위젯 내 상품 내용 변경 테스트
          def test_update_list_designer_products(self):
              with TestingSessionWriteLocal() as db:
                  set_factory_session(db)
                  shop = factory_shop()
        
                  # 추가할 상품 10개 조회 로직
    
                  product_ids = db.execute(stmt_product).scalars().all()
    
                  new_product_ids = random.sample(product_ids, 3)
    
                  # 3개 무작위 선택 후 업데이트 하는 로직 ...
    
                  assert updated_ids == new_product_ids
    

깃헙 액션으로 풀리퀘스트를 머지할 때마다 테스트를 진행해 결과를 나타내고, 커버리지로 테스트되는 코드 비율을 표시하려고 했는데 약간의 문제가 있다. 결국 빌드해서 파이테스트를 돌려봐야 하는데, 깃헙에선 환경변수 파일이 없으니 실행 과정에서 자꾸 오류가 난다. 그렇다고 필요한 환경변수를 모두 repostiory 환경 변수로 설정할 수도 없고 흠..

다른 방법이 뭐가 있을까 고민하다가

  1. 정기적인 Task로 등록해 매일 테스트하고 기록하도록 만든다.
  2. 커밋 전 사람간(나뿐임)의 규칙으로 만든다.

정도 밖에 생각이 안떠오른다. 좋은 방법이 없을까!

회고

어차피 혼자 있는 김에 기가막힌 개발 문화를 만들어놓고 싶다.