-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Test] 음성 녹음 테스트 코드 작성 #183
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다~!
final class RecordManager { | ||
public protocol RecordManagerProtocol { | ||
var recognizedText: String { get } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 저희 네이밍 컨벤션과 다른 것 같습니다!
- minuteAndSeconds가 추상화가 필요한 변수일까요?
|
||
public final class DefaultRecordManager: RecordManagerProtocol { | ||
// MARK: - 음성 인식을 위한 Properties |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RecordManager는 코드 품질을 개선할 여지가 많은 것 같습니다.
추후에 여유가 되신다면 도전해보셔도 좋을 것 같네요!
func test_givenNewViewModel_whenInitialized_thenStateIsCorrectlySet() { | ||
// Then | ||
XCTAssertFalse(viewModel.state.isRecording) | ||
XCTAssertFalse(viewModel.state.canMoveToNext) | ||
XCTAssertEqual(viewModel.state.timeText, "00:00") | ||
XCTAssertFalse(viewModel.state.isErrorPresent) | ||
XCTAssertTrue(viewModel.state.isAuthorized) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
개인적으로 테스트 시나리오의 직관성이 조금 아쉽다는 생각이 듭니다.
ViewModel이 초기화되었을 때 상태값이 올바르게 설정되는지 테스트하는 것 같은데, 명시적으로 ViewModel을 초기화 시키는 코드와 어떤 값으로 초기화가 되어야 하는지 비교 객체를 선언해주시는 건 어떨까요?
// MARK: - Complete Recording Flow Test | ||
func test_GivenInitialState_WhenPerformRecordingSequence_ThenStateTransitionsCorrectly() async { | ||
// Given | ||
XCTAssertFalse(viewModel.state.isRecording) | ||
XCTAssertFalse(viewModel.state.canMoveToNext) | ||
|
||
// When | ||
viewModel.action(.startRecording) | ||
|
||
// Then | ||
XCTAssertTrue(mockRecordManager.setupSpeechCalled) | ||
XCTAssertTrue(mockRecordManager.startRecordingCalled) | ||
XCTAssertTrue(viewModel.state.isRecording) | ||
XCTAssertFalse(viewModel.state.canMoveToNext) | ||
|
||
// When | ||
viewModel.action(.stopRecording) | ||
|
||
// Then | ||
XCTAssertTrue(mockRecordManager.stopRecordingCalled) | ||
XCTAssertFalse(viewModel.state.isRecording) | ||
XCTAssertTrue(viewModel.state.canMoveToNext) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RecordViewModel의 모든 흐름을 한번에 테스트하는 것 같은데요,
유닛테스트의 의의와 원칙을 다시 한번 고민해보시면 좋을 것 같습니다!
📌 관련 이슈 번호 ex) #이슈번호
📘 작업 유형
📙 작업 내역 (구현 내용 및 작업 내역을 기재합니다.)
테스트 결과
📝 특이 사항 (Optional)
Lottie를 PresentationTests를 타겟으로 설치를 진행했습니다.
PresentationTests의 설정을 변경하였습니다.
기존 RecordManager로 테스트를 진행하면, 아래와 같은 에러가 출력됩니다.
위의 문제를 해결하기 위해 테스트용 Mock 객체를 만들어 실제 오디오 기능을 대체하는 방안을 적용해보려고 하였습니다.