본문 바로가기

Study/테스트 주도 개발5

TDD, Mock, SOLID 얘기 - 도시 가스 요금 계산 스터디 메인 페이지 목차 - TDD 스터디에서 라이브코딩으로 TDD를 통한 도시 가스 요금 도메인을 만들면서, Mock과 객체지향의 SOLID 일부를 섞어서 설명한 내용입니다. 비싸진 도시가스 요금에 맞춰 도시가스 요금 관련으로 준비했습니다. 작년 11월부터 스터디했던 TDD, 클린코드, 오브젝트에서 배운걸 섞어서 시나리오를 만들어봤습니다. 개선점이 있다면 알려주세요. - 요구사항 : 도시가스 요금을 계산하는 간단한 로직이 필요함. '단위 요금 x 사용량' 으로 금액을 계산할 것임. 다만 다른 요금 계산 방식이 추가될 예정이다(취약계층 할인 등등). 추가로 아직 DB 부분이 정해지지 않은 상태에서 우선 요금 계산 하는 로직부터 테스트해보며 짜려 하는 상황이다. github 코드 (이하 단계에 따라 커밋되.. 2023. 1. 29.
[TDD] 스터디 4주차 (25~28장 정리) 스터디 메인 페이지 25장. 테스트 주도 개발 패턴 ⚈ 그 어떤 소프트웨어 엔지니어도 아무리 작은 변화라도 테스트하지 않고 릴리즈하지는 않는다. ⚈ 스트레스를 많이 받음 -> 테스트를 점점 뜸하게 함 -> 에러는 점점 많아짐 -> 에러로 인해 더 많은 스트레스! '테스트'를 '자동화된 테스트'로 치환하자. '내가 이걸 고치면서 뭔가 다른 부분을 망가트리지 않았을까?' 라는 두려움을 지루함으로 바꿔주는 효험이 있음 ⚈ 격리된 테스트 - 테스트들은 서로 영향이 없어야 한다. ⚈ 테스트 목록 - 시작하기 전에 작성해야 할 테스트 목록을 모두 적어둘 것. ⚈ 테스트 우선 - 테스트는 언제 작성하는 것이 좋을까? 테스트 대상이 되는 코드를 작성하기 직전! ⚈ 단언 우선 - assert는 언제쯤 쓸까? assert.. 2023. 1. 20.
[TDD] 스터디 3주차 (테스트 반복, 순서 지정, Extension 관련) 스터디 메인 페이지 * 책 내용의 1,2부는 책을 따라 실습하는 내용이므로 정리하는게 의미 없다고 판단되어 다른 스터디와 달리 책 내용은 정리하지 않습니다. 스터디에서 책 이외로 나온 내용만 정리했습니다. ⚈ 예를들어 시간 조건을 두고 테스트가 필요한 경우, 아래와 같은 테스트는 실행할때마다 성공할수도 있고 실패할수도 있다. @Test @DisplayName("1000만까지의 짝수의 합은 1ms 이내에 통과해야 한다.") void test() { Study study = new Study(); long sum = assertTimeoutPreemptively( Duration.ofMillis(1) ,() -> study.sumEvenNumbers(10000000) ,() -> "1000만 이하의 짝수의 .. 2023. 1. 10.
[TDD] 스터디 2주차 (JUnit 관련 내용) 스터디 메인 페이지 * 책 내용의 1,2부는 책을 따라 실습하는 내용이므로 정리하는게 의미 없다고 판단되어 다른 스터디와 달리 책 내용은 정리하지 않습니다. 스터디에서 책 이외로 나온 내용만 정리했습니다. ⚈ IntelliJ 에서 JUnit 테스트는 Gradle로 실행하는 방법과 JUnit으로 실행하는 방법이 있다. Gradle 사용 시 기본 실행은 Gradle로 실행된다. JUnit으로 실행하려면 Edit Configurations 에서 설정을 추가해서 실행하면 된다. 큰 차이는 없는데, Gradle로 실행 시엔 BUILD SUCCESSFUL 같은 그래들 메시지가 붙긴한다. 다만 그래들에서 설정할 수 있는 부분들이 있고, IDE 뿐 아니라 서버 환경에서도 동일하게 쓸 수 있으므로 그래들 쓸꺼면 그래들로.. 2023. 1. 9.
[TDD] 스터디 1주차 (기본적인 테스트 방법, 1~2장 정리) 스터디 메인 페이지 목차 - ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다. ☆ 스터디 킥오프 (테스트 관련 랜덤 팁) 이하 내용은 책 내용 스터디 들어가기 전에 스터디 팀원들끼리 공유한 내용이다. [ Octoping925님의 발표 자료 : https://github.com/Octoping925/TestCodePresent ] ⚈ 실제 구현부와 테스트쪽의 패키지, 클래스명 구조를 동일시 하는게 중요하다. ⚈ GWT, AAA Given : 특정한 값을 가지고 When : 로직을 실행했을 때 Then : 잘 나왔는지 검증한다. AAA : Assignment(=Giv.. 2022. 12. 18.