[Flutter] Test 시 Shared Preferences 무한 로딩

향신료·2023년 10월 10일
0

문제



Flutter에서 Shared Preferences를 포함하여 테스팅을 진행할 때, 아래와 같이 코드를 작성하고 실행하면 아무런 에러나 경고 없이 코드가 돌아가지만 계속 로딩만 될 뿐 실제 진행되지는 않았습니다.




testWidgets('SharedPreferences Test', (WidgetTester tester) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();

    await tester.pumpWidget(
      // 이하 개별 code
    );
  
  });




해결



이때는 SharedPreferences.getInstance() 이전에 아래와 같이 초기 Mock 값을 넣어주면 무한 로딩 없이 작동하며, 해당 Mock 데이터를 기반으로 테스팅이 정상적으로 진행됩니다.


아래 코드의 경우 값을 비워두었기에 SharedPreferences는 빈 상태로 작동되게 됩니다.
SharedPreferences.setMockInitialValues({});


전체 코드
testWidgets('SharedPreferences Test', (WidgetTester tester) async {
		SharedPreferences.setMockInitialValues({});
    SharedPreferences prefs = await SharedPreferences.getInstance();

    await tester.pumpWidget(
      // 이하 개별 code
    );
  
  });





📍 왜 이렇게 설정해 줘야만 동작하는 걸까요?


이유는 아래와 같습니다.
  • 테스트 케이스 간에 데이터가 공유되지 않도록 하기 위해
  • 특정 시나리오에 대한 예상된 초기 데이터 상태를 설정하기 위해

종합적으로 간단하게 정리하면, 테스트 환경 당 예상되는 데이터 상태를 정의하고 개별적으로 값을 제어할 수 있으므로 테스트를 효과적으로 수행할 수 있도록 하기 위함입니다.


profile
드문드문 기초 정보를 올리는 블로그

0개의 댓글