Flutter

Flutter - Test 2편

Mr. Joo 2023. 11. 10. 10:33
728x90

2.이메일과 주민번호 테스트하기

2.1 테스트 예제 - 주민번호 확인하기 ( social security number validator )

주민 번호는 앞에는 생년월일, 뒤에는 성별 및 주소로 되어 있죠.

이를 확인하는 정규표현식을 작성해 보겠습니다.

 

field_validator.dart

class FieldValidator {
  
  static bool validateSocialSecurityNumber(String input) {
    if (input.isEmpty) return false;
​
    Pattern pattern = r'^[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|[3][01])-([1-4][0-9]{6})'; 
    RegExp exp = RegExp(pattern);
​
    if (exp.hasMatch(input)) return true; // 유효한 주민번호면 true 리턴
​
    return false;
  }
  
}

정규표현식과 매칭되면 true를 반환하고 아니면 false를 반환합니다..

 

이제 함수를 테스트 해볼게요.

 

911222-2110332 , 761031-1518312, 983015-1910312 를 넣어볼건데요.

911222-2110332 , 761031-1518312 은 true를 반환하고

983015-1910312 은 983015니 (30월이니) false를 반환해야겠죠.

 

정말 그런지 테스트 해볼께요.

 

test/field_validator_test.dart

void main() {
  group('field validator test', () {
​
    test('validate Social Security Number', () {
​
      final String socialNumber = "911222-2110332";
      expect(FieldValidator.validateSocialSecurityNumber(socialNumber), true);
​
      final String socialNumber2 = "761031-1518312";
      expect(FieldValidator.validateSocialSecurityNumber(socialNumber2), true);
​
      final String socialNumber3 = "983015-1910312";
      expect(FieldValidator.validateSocialSecurityNumber(socialNumber3), false); 
    });
  });
}

 

예상대로 테스트를 통과하네요.

이해를 위해 테스트를 좀 더 해볼게요.

 

이메일을 확인하는 함수를 작성하고 테스트 해보겠습니다. .

 

2.2 테스트 예제 - 이메일 확인하기 ( email validator )

아래 코드를 봐주세요.

validateEmail()는 이메일 형식에 맞으면 true를 반환하고, 아니면 false를 반환하는 함수입니다.

 

field_validator.dart

class FieldValidator {
​
  static bool validateEmail(String email) {
    if (email.isEmpty) return false;
​
    Pattern pattern = r'^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$'; 
    RegExp exp = RegExp(pattern);
​
    if (exp.hasMatch(email)) return true; // 유효한 이메일이면 true 리턴
​
    return false;
  }
  
}

 

테스트 케이스는 2개를 작성했습니다.

jootest@gmail.com, jootest #@gmail.com 란 입력인데요.

badday#@gmail.com 은 #이 들어있어서 유효한 이메일이 아닙니다.

2 케이스 다 통과할거라고 테스트 함수를 짜면, 하나는 실패하겠죠?

정말 그런지 볼게요.

 

test/field_validator_test.dart

import 'package:test/test.dart';
import '../src/field_validator.dart';


void main() {
  group('field validator test', () {

    test("validateEmail", (){
      const String email1 = "jootest@gamil.com";

      expect(FieldValidator.validateEmail(email1), true); // 통과할거로 예상하고 통과

      const  String email2 = "jootest#@gmail.com";

      expect(FieldValidator.validateEmail(email2), true , reason: '# is a not valid character'); // 통과할 거로 예상했으나 통과하지 못하기에 test fail
    });
  });
}

 

테스트 실행결과

Expected: <true>
  Actual: <false>
# is a not valid character

예상대로 이메일 jootest #@gmail.com는 테스트를 통과하지 못하네요.

이번엔 expect() 에다 reason 을 적어줬습니다. reason을 적으면 테스트가 실패한 원인을 알려줍니다.

728x90
LIST