📑

Flutterでtestを書いてみた👀

2022/10/04に公開

|プログラムにおける単体テストとは?

単体テストとは関数などが返す値はこうです。という感じで
プログラムのコードの品質、信頼性を保証するために存在します。

//テストを行う関数
const counter (num1,num2) => {
 return answer = num1 + num2
}

//テストを実行するコード
test("正常系のテスト",(){
 final int num1 = 1;
 final int num2 = 2;
 
 counter(num1,num2)
 expect(3)
})

これでこのcounterという関数では引数を2つ与えると加算し、値を返すというテストができました
※expextというのがテストをする際に返ってきて欲しい値、期待値です

|もう少し複雑なテストを書いてみよう

  • リポジトリ
  • ユースケース
    主に上記2つがメインとなってきます

|会員登録をするケースの単体テストの実施(USECASE ~Mock~)

今回のケースでは、repository,provider,entityを使用している前提です

//usecase_test.dart

group('会員登録のテスト',()async{
 test('正常系',()async{
  final container = override();
  final notifier = container.read(RegisterUseCaseProvider.notifier);
  
  var user = WebUserState(
   userFirstName:'ほげ'
   userLastName:'太郎'
   zipCode:'1210813'
   phoneNumber:'09012345678'
   email:'hoge@exmple.com'
  )
  notifier.setUserState(user);
  await notifier.regist()
  
  expext(
    notifier.debugState.status,
    WebUserStateStatus.end
   )
 });
});

ProviderContainer override(){
 return ProviderContainer(
  overrides: [
   webUserRegisterRepo.overrideWithProvider(
    Provider((ref) => webUserRegisterRepoMock())
   )
  ])
}

class webUserRegisterRepoMock extends Mock
 implements webUserRegisterRepo{
  Future<void> registerUser(WebUserState user) async {
   switch(user.zipCode){
     //zipcodeが1210813の時は正常系
    case '1210813'
     break
   }
  }
 }

Discussion