[Flutter] Test Matcher 사용하기

2024-10-09 hit count image

Flutter에서 테스트 코드에서 사용 가능한 Matcher에 대해서 알아보고 이를 사용하는 방법에 대해서 알아보겠습니다.

개요

Flutter에서 테스트 코드를 작성할 때, 여러가지 Matcher를 사용할 수 있습니다. 이번 블로그 포스트에서는 Flutter의 테스트 코드에서 사용 가능한 Matcher에 대해서 알아보고 이를 사용하는 방법에 대해서 알아보겠습니다.

Matcher

테스트 코드에서 Matcher는 특정 값이나 조건을 검증하는 데 사용되는 검증 도구입니다. 테스트가 실제 값과 기대하는 값 또는 상태가 일치하는지 비교할 때, Matcher를 사용하여 더 표현력 있고 읽기 쉬운 테스트 코드를 작성할 수 있습니다.

Flutter의 테스트 코드에서 Matcher는 expect 구문을 통해 값이 예상하는 조건에 맞는지 확인할 때 주로 사용됩니다. Matcher는 단순한 값 비교뿐 아니라, 더 복잡한 조건이나 다양한 유형의 검증을 지원합니다.

예를 들어:

  • equals: 값이 특정 값과 동일한지 비교할 수 있습니다.
  • isNull: 값이 널인지 확인할 수 있습니다.
  • contains: 컬렉션이나 문자열에 특정 항목이 포함되었는지 검사할 수 있습니다.
  • throwsException: 함수가 예외를 던지는지 확인할 수 있습니다.
void main() {
  test('Example', () {
    var numbers = [1, 2, 3];
    expect(numbers, contains(2));
    expect(numbers, isNotEmpty);
    expect(() => throw Exception('Error'), throwsException);
  });
}

Matcher를 사용하면 테스트 코드가 더 직관적이고 읽기 쉽게 변해 가독성이 향상되며, 복잡한 조건이나 상태를 간결하게 처리할 수 있습니다. 또한, 여러 조건을 결합하거나 부정(Negation)할 수 있어 더 유연한 테스트 작성이 가능합니다.

자주 사용되는 Matcher

Flutter의 공식 문서를 확인하면 사용가능한 Matcher들을 확인할 수 있습니다.

여기서는 자주 사용하는 Matcher들을 소개하겠습니다.

  • equals(expected): 주어진 값이 expected와 같은지 확인합니다.
expect(actual, equals(expected));
  • isNot(matcher): 값이 주어진 매처와 일치하지 않는지 확인합니다.
expect(actual, isNot(equals(5)));
  • isTrue / isFalse: 값이 true 또는 false인지 확인합니다.
expect(value, isTrue);
  • contains(element): 컬렉션이나 문자열에 특정 요소가 포함되어 있는지 확인합니다.
expect([1, 2, 3], contains(2));
  • isNull / isNotNull: 값이 null인지 또는 null이 아닌지 확인합니다.
expect(value, isNull);
expect(value, isNotNull);
  • greaterThan(value) / lessThan(value): 값이 주어진 값보다 큰지 또는 작은지 확인합니다.
expect(number, greaterThan(10));
  • startsWith(prefix) / endsWith(suffix): 문자열이 특정 문자열로 시작하거나 끝나는지 확인합니다.
expect('Flutter', startsWith('Fl'));
  • throwsException / throwsA(matcher): 특정 예외가 발생하는지 확인합니다.
expect(() => someFunction(), throwsException);
  • allOf(matcher1, matcher2, …): 주어진 매처들이 모두 일치하는지 확인합니다.
expect(value, allOf(startsWith('Fl'), contains('utt')));
  • anyOf(matcher1, matcher2, …): 주어진 매처들 중 하나라도 일치하는지 확인합니다.
expect(value, anyOf(equals(1), equals(2)));
  • isA(): 값이 특정 타입인지 확인합니다.
expect(value, isA<int>());

완료

이것으로 Flutter의 테스트 코드에서 사용 가능한 Matcher에 대해서 알아보았습니다. Matcher를 사용하면 테스트 코드를 더 직관적이고 읽기 쉽게 작성할 수 있으며, 다양한 조건을 검증할 수 있어 유용합니다.

Flutter의 위젯 테스트에서 저는 다음과 같은 코드를 종종 사용했었습니다.

expect(titleContainer.child.runtimeType, Container);

이를 다음과 같이 isA<T>() Matcher를 사용하면 더 명확하게 표현할 수 있습니다.

expect(titleContainer.child, isA<Container>());

여러분도 Matcher를 사용하여 테스트 코드를 작성할 때, 더 효율적이고 읽기 쉽게 작성해보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts