Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- USIM
- 개발
- Bloc
- virtualmachine
- postgres
- DART
- 리눅스
- 오류
- SICP
- 일상
- 퇴근길
- 오블완
- 템플릿
- VM
- 유심
- 오토바이
- Linux
- 인프라
- ubuntu
- 가상머신
- podman
- Flutter
- 주유소
- VMware
- 잡담
- 티스토리챌린지
- 객체지향프로그래밍
- 휘발류
- 주유
- FreeBSD
Archives
- Today
- Total
sync86 블로그
[Dart/Flutter] 테스트 - Map.putIfAbsent 본문
728x90
코드를 수정하면 수정한 곳 이외에 다른 곳에서 오류가 생기는 경우가 많아졌다. 해결 방법으로 테스트를 작성하여 만약 문제가 생긴다면 빨리 발견하면 좋을 것 같다. 그러나 TDD (Test Driven Development)로 코드를 작성하길 원하는 것은 아니다. 적어도 코드를 수정하면 어디서 문제가 생겼다는 것만 발견할 수 있으면 된다. 그러나 아직 습관이 안되서 테스트를 작성하는 것에 손이 가지 않는다. 그래서 블로그에 글 작성을 빌미로 시도해보려고한다.
Dart 프로젝트 생성
목표는 Flutter 위젯과 함께 통합 테스트까지 작성하는 것이다. 하지만 처음에는 간단하게 시작하길 원한다.
$ dart create putifabsent
Creating putifabsent using template console...
.gitignore
analysis_options.yaml
CHANGELOG.md
pubspec.yaml
README.md
bin/putifabsent.dart
lib/putifabsent.dart
test/putifabsent_test.dart
Running pub get... 2.5s
Resolving dependencies...
Downloading packages...
Changed 50 dependencies!
5 packages have newer versions incompatible with dependency constraints.
Try `dart pub outdated` for more information.
Created project putifabsent in putifabsent! In order to get started, run the following commands:
cd putifabsent
dart run
테스트 작성 - putifabsent:/test/putifabsent.dart
유닛테스트를 작성하기 전에 어떤 결과를 기대하는지 간략히 정리하였다. 추가적으로 좀 더 당연하다고 생각하는 것, 좀 더 다양한 테스트 할 수 있는 상황이 있을 것 같다는 느낌이 든다. 그러나 생각이 나지 않는다. ㅠㅠ
- 초기
- Map을 생성한 직후에는 Map 컬렉션은 비어 있어야 한다.
- 비어있으면서, a키는 없어야 한다.
- _cachedMap.putIfAbsent 호출하여 a키에 1을 대입할 경우
- a키가 있어야 한다.
- a키의 값은 1이어야 한다.
- _cachedMap.putIfAbsent 을 한번 더 호출하여 a키에 1을 대입할 경우
- 한번 더 대입하더라도, a키가 있어야 한다.
- 한번 더 대입하더라도, a키의 값은 1이어야 한다.
import 'package:test/test.dart';
final Map<String, int> _cachedMap = <String, int>{};
void main() {
group('초기,', () {
test('_cachedMap은 비어 있어야 한다.', () {
expect(_cachedMap.isEmpty, equals(true));
});
test('_cachedMap에 a키가 없어야 한다.', () {
expect(_cachedMap.containsKey('a'), equals(false));
});
});
group('_cachedMap.putIfAbsent', () {
test('a키를 대입한다.', () {
_cachedMap.putIfAbsent('a', () => 1);
});
test('_cachedMap.putIfAbsent a키를 대입했다면, a키는 있어야 한다.', () {
expect(_cachedMap.containsKey('a'), equals(true));
});
test('_cachedMap.putIfAbsent a키를 대입했다면, a키의 값은 1 이어야 한다.', () {
expect(_cachedMap['a'], equals(1));
});
});
group('_cachedMap.putIfAbsent', () {
test('한번 더 _cachedMap.putIfAbsent에 a키의 값을 1로 대입한다.', () {
_cachedMap.putIfAbsent('a', () => 1);
});
test('a키는 있어야 한다.', () {
expect(_cachedMap.containsKey('a'), equals(true));
});
test('a키의 값은 1이어야 한다.', () {
expect(_cachedMap['a'], equals(1));
});
});
}
작성한 테스트 실행
$ flutter test 명령어를 실행하였다. 물론 Visual Studio Code와 Dart/Flutter 확장 플러그인을 함께 사용하기 때문에 구태여 콘솔에서 실행할 이유는 없다. 그런데 결과를 보니 2번 실행된 것 같은데 어떤 이유일까?
찾아봐야겠다.
$ dart test
Building package executable...
Built test:test.
00:00 +0: test/putifabsent_test.dart: 초기, _cachedMap은 비어 있어야 한다.
00:00 +1: test/putifabsent_test.dart: 초기, _cachedMap은 비어 있어야 한다.
00:00 +1: test/putifabsent_test.dart: 초기, _cachedMap에 a키가 없어야 한다.
00:00 +2: test/putifabsent_test.dart: 초기, _cachedMap에 a키가 없어야 한다.
00:00 +2: test/putifabsent_test.dart: _cachedMap.putIfAbsent a키를 대입한다.
00:00 +3: test/putifabsent_test.dart: _cachedMap.putIfAbsent a키를 대입한다.
00:00 +3: test/putifabsent_test.dart: _cachedMap.putIfAbsent _cachedMap.putIfAbsent a키를 대입했다면, a키는 있어야 한다.
00:00 +4: test/putifabsent_test.dart: _cachedMap.putIfAbsent _cachedMap.putIfAbsent a키를 대입했다면, a키는 있어야 한다.
00:00 +4: test/putifabsent_test.dart: _cachedMap.putIfAbsent _cachedMap.putIfAbsent a키를 대입했다면, a키의 값은 1 이어야 한다.
00:00 +5: test/putifabsent_test.dart: _cachedMap.putIfAbsent _cachedMap.putIfAbsent a키를 대입했다면, a키의 값은 1 이어야 한다.
00:00 +5: test/putifabsent_test.dart: _cachedMap.putIfAbsent 한번 더 _cachedMap.putIfAbsent에 a키의 값을 1로 대입한다.
00:00 +6: test/putifabsent_test.dart: _cachedMap.putIfAbsent 한번 더 _cachedMap.putIfAbsent에 a키의 값을 1로 대입한다.
00:00 +6: test/putifabsent_test.dart: _cachedMap.putIfAbsent a키는 있어야 한다.
00:00 +7: test/putifabsent_test.dart: _cachedMap.putIfAbsent a키는 있어야 한다.
00:00 +7: test/putifabsent_test.dart: _cachedMap.putIfAbsent a키의 값은 1이어야 한다.
00:00 +8: test/putifabsent_test.dart: _cachedMap.putIfAbsent a키의 값은 1이어야 한다.
00:00 +8: All tests passed!
728x90
'개발기' 카테고리의 다른 글
[SICP] 노트 - 프로그래밍 언어에서 다루는 요소 (0) | 2025.02.17 |
---|---|
[iOS] 에뮬레이터에서 인앱결제 테스트를 못하는 것인가? (0) | 2025.01.15 |
[Dart/Flutter] Provider로 구성한 프로젝트가 너무 빈번히 업데이트가 된다. (0) | 2024.11.21 |
[Dart/Flutter] Cubit과 BLoC가 공존하는 이유! (0) | 2024.10.17 |
[Dart/Flutter] 요즘 BLoC를 훑어보게 된 이유? (1) | 2024.10.16 |