Flutter: 데이터 테스팅

이전 게시물에서 보다 정확하고 방탄적인 위젯 테스트를 위해 find.byPredicate를 사용하는 방법에 대해 논의했습니다.

Flutter: Up your testing game

이 게시물에서는 데이터 관련 단위 테스트를 위해 동일한 논리를 빠르게 살펴보겠습니다.

내 데이터 모델의 95%에 대해 freezed 을 사용할 것입니다. 이 패키지는 데이터 클래스와 관련하여 몇 가지 유틸리티 메서드를 추가하고 평등을 처리하여 단위 테스트를 단순화하는 등의 작업을 훨씬 더 간단하게 만들어줍니다. 이전에 equatable의 도움을 받아 수동으로 달성한 것입니다.

그러나 코드 생성과 함께 작동하므로 freezed를 사용할 때 약간의 상용구가 있습니다.

enum MenuItemKey {logout, dashboard}

class MenuItem {
  final MenuItemKey key;
  final String localeKey;
  final PageRouteInfo route;

  MenuItem({
    required this.key,
    required this.localeKey,
    required this.route,
  });

  static List<MenuItem> menuItems = [...]

  static List<MenuItem> itemsToDisplay(List<MenuItemKey> excludedKeys) {
    return menuItems
        .where((element) => !excludedKeys.contains(element.key))
        .toList();
  }
}


예를 들어 이 클래스를 선택하면 freezed를 추가하는 것이 간단하고 2~3줄의 코드와 추가 생성 파일을 추가할 수 있지만 단순히 탐색 목록을 관리하기 위해 만든 모델이므로 불필요하다고 느꼈습니다. 테스트할 데이터가 없고, API와 관련이 없으며, 동등성이나 유틸리티 메서드가 필요하지 않습니다.

내 응용 프로그램에는 menuItems 목록이 제공되는 메뉴가 있으며 이를 통해 탐색 항목을 생성합니다.

그러나 여전히 이 클래스에 연결된 1비트 로직인 정확하게 테스트itemsToDisplay할 수 있기를 원합니다. 기본적으로 모든 항목은 생성 기능을 기반으로 하지만 모든 화면에 모든 탐색 항목이 있는 것은 아닙니다. 예를 들어 로그인 화면에는 로그아웃 버튼이 필요하지 않습니다.

시험...



위젯과 마찬가지로 predicate를 expect 함수의 일부로 사용하여 데이터 모델을 드릴다운하고 결과를 정의된 값과 비교할 수 있습니다.

  test('should return only logout menu item', () async {
    //act
    final result = MenuItem.itemsToDisplay([
      MenuItemKey.dashboard,
      MenuItemKey.support,
      MenuItemKey.profile,
    ]);
    //assert
    expect(
      result,
      predicate(
        (List<MenuItem> items) =>
            items.length == 1 && items.first.key == MenuItemKey.logout,
      ),
    );
  });


위의 예에서 menuItems 목록에 4개의 항목이 있고 모든 BUT logout 를 필터링하기로 결정했습니다.

함수가 작동하는지 확인하기 위해 predicate를 사용하여 예상한 데이터 유형이 있는 함수를 예상하고 부울 결과를 생성하는 검사를 반환합니다.

이 경우 4개의 메뉴 항목이 포함된 목록이 있었고 그중 3개를 제외하여 목록에 1개의 항목만 있는지 확인하고 올바른 항목이 남아 있는지 확인하기 위해 첫 번째(유일한) 항목이 목록에는 탐색 항목에 할당된 enum 값인 MenuItemKey.logout 키가 있습니다.

결론...



이제 알 수 있듯이 find.byPredicatepredicate는 테스터가 테스트를 작성할 때 염두에 두어야 하는 두 가지 매우 유용한 방법입니다. 덜 표준적인 사용 사례에 도움이 될 수 있으며 더 높은 품질의 테스트를 작성할 수 있습니다.


이 내용이 흥미로웠기를 바라며 질문, 의견 또는 개선 사항이 있으면 언제든지 의견을 남겨 주십시오. Flutter 개발 여정을 즐기세요 :D

재미있게 보셨다면 좋아요는 굉장할 것입니다.

읽어 주셔서 감사합니다.


단위 테스트 주제를 계속 진행하려면 다음을 살펴보십시오.


  • 좋은 웹페이지 즐겨찾기