테스트의 중요성에 대해서는 알고 있지만, 실제 프로젝트는 어떻게 적용해야 할지 모르는 어려운 경우가 많습니다. BDD를 적용하기 위해서 개발을 시작하기 전에 Use Case를 정리하고, Clean Swift의 각 컴포넌트를 구현하면서 Test Case까지 작성해본 실제 프로젝트 경험을 공유합니다.
14. BDD
• Feature: 테스트 대상의 기능/책임을 명시합니다.
• Scenario: 테스트 목적에 대한 상황을 설명합니다.
• Given: 시나리오 진행에 필요한 값을 설정합니다.
• When: 시나리오를 진행하는데 필요한 조건을 명시합니다.
• Then: 시나리오를 완료했을 때 보장해야 하는 결과를 명시합니다.
15. describe("Given the User repository") {
var userRepository: UserRepository!
beforeEach {
userRepository = UserRepository(mode: .inMemory)
}
context("When a user is saved") {
beforeEach {
userRepository.deleteAll()
userRepository.populateTestUsers()
let user = User()
user.email = "user.test@sampleemail.com"
userRepository.save(user)
}
it("Should be recoverable") {
let recoveredUser = userRepository.findOne(
email: "user.test@sampleemail.com"
)
expect(recoveredUser).toNot(beNil())
}
}
}
19. Clean Swift
• ViewController (UI 디자인)
• 뷰 이벤트를 Interactor에 전달, Presenter가 주는 데이터 표시
• Interactor (이벤트 처리)
• 이벤트 처리, 상태 관리, 모든 비즈니스 로직을 담당 / Worker와 협력
• Presenter (ViewModel 생성)
• Interactor에서 받은 데이터를 ViewModel로 바꿔서 View에 전달