Flutter - Test 2편
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을 적으면 테스트가 실패한 원인을 알려줍니다.