Skip to content
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

[Refactor] UnitTest BDD 형태로 리팩토링 with Quick Nimble 및 메서드 Completion 방식 변경 #22

Merged
merged 6 commits into from
Jul 23, 2022

Conversation

keeplo
Copy link
Contributor

@keeplo keeplo commented Jul 18, 2022

구현 배경

#21 - BDD 적용 (하루만)
07.17 미팅 중 언급된 Bool 반환 메서드 completion 방식 -> 클로저로 변경 (non-Excaping) 요청

기능 설명

Specs 공통

  • 불 필요한 import 주입 제거 및 프레임워크 필요 부분만 import
  • 불 필요한 주석 제거
  • 객체별 테스트 형태 -> BDD 형태로 변환 시도
    • 테스트 파일 삭제 ~Tests.swift
  • BDD 문맥 한글화
  • 모듈 자체 테스트 가능하게 구현하기
    • AppTarget 제외 필수적인 상황(Mock) 제외하면 타 모듈 import 최소화
      • Conversation 데이터 .empty 타입 프로퍼티 이용해서 import 피함
    • extension sut 연산프로퍼티를 이용한 초기화
    • 불가피하게 해결 못 한 부분은 // TODO: 주석

Domain Module

Bool 반환 매서드 completion 방식 -> 클로저로 변경 (non-Excaping)

  • 메서드 성공 확인 completion: (Error?) -> Void)
  • 메서드 결과 확인 completion: (Result<URL, Error>) -> Void) // URL 이외에도 가능

코멘트

미팅때 언급되었던 부분 반영해보았습니다. ( - [x] 테스트는 하루만 고심하기 )
Error 타입 생성되면 적용위해 수정이 한번 필요하고,

앞으로 모든 코드 작성 시 현재까지 구성된 Test 스타일 유지해서 Test 코드 병행 구현해야 합니다

- 불 필요한 import 주입 제거
- 객체별 테스트 형태 -> BDD 형태로 변환 시도
   - 테스트 파일 삭제 CasualConversationTests.swift
- BDD 문맥 한글화
- 불 필요한 import 주입 제거
- 불 필요한 주석 제거
- 객체별 테스트 형태 -> BDD 형태로 변환 시도
   - 테스트 파일 삭제 DataTests.swift
- BDD 문맥 한글화
- 불 필요한 import 주입 제거
- 불 필요한 주석 제거
- 객체별 테스트 형태 -> BDD 형태로 변환 시도
   - 테스트 파일 삭제 DomainLayerTests.swift
- BDD 문맥 한글화
- 불 필요한 import 주입 제거
- 불 필요한 주석 제거
- 객체별 테스트 형태 -> BDD 형태로 변환 시도
   - 테스트 파일 삭제 PresentationTests.swift
- BDD 문맥 한글화
각 객체의 BDD 파일을 독립 구성
Bool 반환 -> Error? 매개변수 completion closure 형태로 변경
- Quick 버전 상이해서 Result 부분 주석처리함
@keeplo keeplo added the refactor It'll be refactoring label Jul 18, 2022
@keeplo keeplo requested a review from dacodaco July 18, 2022 15:48
@keeplo keeplo self-assigned this Jul 18, 2022
Comment on lines +17 to +31
describe("인스턴스 객체") {
var appDIContainer: AppDIContainer!
beforeEach { appDIContainer = AppDIContainer() }
afterEach { appDIContainer = nil }

describe("Presentation Layer에 DIContainer 전달 위해서") {
context("팩토리메서드 호출하면") {
var presentationDIContainer: PresentationDIContainer!
beforeEach { presentationDIContainer = appDIContainer.makePresentationDIContainer() }

it("PresentationDIContainer 생성됨") {
expect(presentationDIContainer).notTo(beNil())
}
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

첫 describe를 describe("AppDIContainer가")로 바꾸는 것은 어떨까요?!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분에 대한 고민이 있습니다. 구현할때 제 생각으로 짜봤는 데
정확히 내용 설명이 없었던 것 같네요 ㅠ

image

image

우선 제가 생각한 아이디어는 현재 테스트 방식이 기존 UnitTest 처럼,
하나의 사용자 타입에서 일어나는 BDD 라는 의미로 타입별로 Specs를 생성했습니다.

두번째 스크린샷처럼 테스트 문장을 대표하는 최상위 파일명(타입명Specs) == 테스트할 사용자 타입이므로,
첫 테스트 문장을 의미하는 describe() 부분을 "인스턴스 객체" 로 표기했습니다.

현재 저희 구현에서 DIContainer를 싱글턴이나 타입 메서드로 사용하지 않지만,
상황에 따라 팩토리 메서드가 정적 메서드인 경우면
첫 describe() 표기를 "타입 객체" 등으로 구분하면 어떨까 하는 생각으로 현재처럼 구현했습니다.

이런 아이디어 공유 없었는데 혹시 이런 방식은 어떨지 코다 생각이 궁금합니다!

@dacodaco dacodaco merged commit 4d38254 into develop Jul 23, 2022
@keeplo keeplo deleted the test-audioservice_unittest_by_bdd branch September 18, 2022 12:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactor It'll be refactoring
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants