티스토리 뷰

반응형

모든 일반적인 Flutter 테스트 유형은 플러그인 패키지에도 적용되지만, 플러그인은 네이티브 코드를 포함하므로 모든 기능을 테스트하려면 다른 종류의 테스트도 필요할 수 있습니다.


 

플러그인 테스트 유형

이러한 각 테스트 유형의 예제를 보려면 플러그인 템플릿으로 새 플러그인을 생성하고 지정된 디렉토리를 확인하세요.

 

Dart 단위 테스트 및 위젯 테스트

이 테스트들은 플러그인의 Dart 부분을 일반 Dart 코드처럼 테스트할 수 있게 해줍니다. 그러나 플러그인의 네이티브 코드는 로드되지 않기 때문에 플랫폼 채널 호출은 테스트에서 모킹해야 합니다.

 

Dart 통합 테스트

통합 테스트는 Flutter 애플리케이션(예제 앱)의 컨텍스트에서 실행되므로 Dart와 네이티브 코드 모두를 테스트할 수 있으며, 이 둘 사이의 상호작용도 테스트할 수 있습니다. 또한 브라우저에서 실행되어야 하는 웹 구현 코드의 단위 테스트에도 유용합니다.

 

이 테스트는 일반적으로 플러그인에서 가장 중요한 테스트입니다. 단, Dart 통합 테스트는 네이티브 UI(예: 네이티브 다이얼로그나 플랫폼 뷰의 내용)와 상호작용할 수 없습니다.

 

네이티브 단위 테스트

Dart 단위 테스트가 Dart 코드만 따로 테스트할 수 있는 것처럼, 네이티브 단위 테스트는 네이티브 코드만 따로 테스트할 수 있습니다. 각 플랫폼은 고유의 네이티브 단위 테스트 시스템을 가지고 있으며, 테스트는 해당 코드와 동일한 네이티브 언어로 작성됩니다.

 

이 테스트는 플러그인 코드가 감싸는 API를 모킹해야 하는 경우에 특히 유용하며, Dart 통합 테스트에서는 이러한 모킹이 불가능할 수 있습니다.

각 플랫폼에 대해 익숙한 네이티브 테스트 프레임워크를 사용할 수 있지만, 다음 프레임워크들은 플러그인 템플릿에 이미 설정되어 있습니다:

  • Android: JUnit 테스트는 android/src/test/에 있습니다.
  • iOS 및 macOS: XCTest 테스트는 example/ios/RunnerTests/와 example/macos/RunnerTests/에 있습니다. 이 테스트들은 상위 패키지 디렉토리가 아닌 예제 앱 디렉토리에 위치하며, 예제 앱의 프로젝트를 통해 실행됩니다.
  • Linux 및 Windows: GoogleTest 테스트는 각각 linux/test/ 및 windows/test/에 있습니다.

 

기타 테스트 유형

현재 템플릿에 사전 구성되어 있지는 않지만, 네이티브 UI 테스트도 존재합니다. Espresso나 XCUITest 같은 네이티브 UI 테스트 프레임워크에서 애플리케이션을 실행하면 네이티브 및 Flutter UI 요소 모두와 상호작용하는 테스트를 실행할 수 있습니다. 이는 플러그인을 네이티브 UI 상호작용 없이는 테스트할 수 없는 경우에 유용할 수 있습니다.


 

테스트 실행

Dart 단위 테스트

다른 Flutter 단위 테스트와 동일하게 실행할 수 있습니다.
Flutter에서 선호하는 IDE 또는 flutter test 명령어를 사용할 수 있습니다.

 

통합 테스트

이 테스트 유형을 실행하는 방법은 통합 테스트 문서를 참고하세요.

명령어는 반드시 example 디렉토리에서 실행해야 합니다.

 

네이티브 단위 테스트

모든 플랫폼에서 유닛 테스트를 실행하기 전에 예제 앱을 한 번 이상 빌드해야 합니다.

플랫폼별 빌드 파일이 생성되어야 테스트가 가능하기 때문입니다.

 

Android - JUnit

Android Studio에서 예제 앱을 Android 프로젝트로 열었다면, Android Studio의 테스트 UI를 통해 테스트를 실행할 수 있습니다.

 

명령줄에서 실행하려면 example/android 디렉토리에서 다음 명령을 사용하세요:

./gradlew testDebugUnitTest

 

iOS 및 macOS - XCTest

Xcode에서 예제 앱을 열었다면 Xcode의 테스트 UI로 테스트를 실행할 수 있습니다.

 

명령줄에서 실행하려면 iOS는 example/ios, macOS는 example/macos 디렉토리에서 다음 명령을 실행하세요:

xcodebuild test -workspace Runner.xcworkspace -scheme Runner -configuration Debug

 

💡 iOS 테스트의 경우, 코드 서명 구성을 위해 Runner.xcworkspace를 Xcode에서 먼저 열어야 할 수도 있습니다.

 

Linux - GoogleTest

명령줄에서 실행하려면 example 디렉토리에서 다음 명령어를 실행하세요.

여기서 "my_plugin"은 여러분의 플러그인 프로젝트 이름으로 바꿔야 합니다:

build/linux/plugins/x64/debug/my_plugin/my_plugin_test

 

예제 앱을 release 모드로 빌드했다면 "debug" 대신 "release"를 사용하세요.

 

Windows - GoogleTest

Visual Studio에서 예제 앱을 열었다면, Visual Studio의 테스트 UI로 테스트를 실행할 수 있습니다.

 

명령줄에서 실행하려면 example 디렉토리에서 다음 명령을 실행하세요.

여기서 "my_plugin"은 여러분의 플러그인 프로젝트 이름으로 바꿔야 합니다:

build/windows/plugins/my_plugin/Debug/my_plugin_test.exe


예제 앱을 release 모드로 빌드했다면 "Debug" 대신 "Release"를 사용하세요.


 

어떤 종류의 테스트를 추가해야 하나요?

일반적인 Flutter 프로젝트의 테스트에 대한 조언은 플러그인에도 적용됩니다.

플러그인 테스트에 대한 몇 가지 추가적인 고려사항은 다음과 같습니다:

  • Dart와 네이티브 언어 간의 통신을 테스트할 수 있는 유일한 방법은 통합 테스트이므로, 각 플랫폼 채널 호출마다 최소 하나의 통합 테스트를 작성하는 것이 좋습니다.
  • 일부 흐름은 통합 테스트로 테스트할 수 없을 수도 있습니다. 예를 들어 네이티브 UI와 상호작용하거나, 디바이스 상태를 모킹해야 하는 경우입니다. 이러한 경우, 다음과 같은 방식으로 "엔드 투 엔드" 테스트를 작성하는 것이 좋습니다:
    • 네이티브 단위 테스트: 필요한 모킹을 설정한 후, 메서드 채널 진입점에 합성된 호출을 전달하고 응답을 검증합니다.
    • Dart 단위 테스트: 플랫폼 채널을 모킹한 후, 플러그인의 공개 API를 호출하고 결과를 검증합니다.

반응형
댓글
공지사항