본문 바로가기

개발/TEST관련4

테스트에서의 서비스 추상화 JavaMailServiceImpl을 사용하는 UserService가 있다고 생각해보자. 테스트를 진행하려는데 JavaMailServiceImpl을 사용하되 실제 메일은 보내지지 않았으면 좋겠다. 이런 경우에는 JavaMailServiceImpl을 위한 Interface인 MailSender를 둔 후, MailSender만 사용한다. UserService에서는 DI를 통해 운영 시에는 JavaMailServiceImpl을, 테스트 시에는 DummyMailService를 사용하게 만든다면 의도한 대로이다. 추상화와 DI를 잘 활용하는 것이 Spring이라는 Framework를 잘 사용하는 것인 것 같다. 2020. 10. 5.
테스트 주도 개발 3~9장 테스트가 다른 테스트에 영향을 주는지 판단하자 abstract class Money { protected int amount; protected String currency; public boolean equals(Object object){ // 같은지 확인 Money money=(Money) object; return amount==money.amount &&getClass().equals(money.getClass()); } abstract Money times(int multiplier); // 곱하기 함수 } 이러한 Money 추상 클래스가 있다고 합시다. 만약 times함수에 대한 테스트를 assertEquals를 통해 하게 된다면 equals함수를 통해 검사를 하게 됩니다. equals함수의.. 2020. 6. 15.
테스트 주도 개발 - 1~2장 TDD의 주기 테스트를 작성한다. 올바른 답을 얻기 위해 필요한 모든 요소를 포함하여야한다! 실행 가능하게 만든다. 빨리 초록 막대를 보는 것이 핵심이다. 깔끔하고 단순한 해법이 명백히 보인다면 바로 구현하는 것도 괜찮다. 하지만 구현에 몇분이상 걸린다면 최대한 짧고 나쁘게(?) 구현한다. 올바르게 만든다.(리팩토링) 저질렀던 죄악을 수습한다. 소프트웨어 정의에 따라 구현한다. 이러한 주기를 짧게 가져갈 수 록 좋다. 테스트도 작은 테스트 단위로 추가하고 코드를 조금 수정 후, 바로 리팩토링을 한다. TDD의 목표는 무엇일까? 작동하는 깔끔한 코드를 얻는 것이 목적이다. 두려움을 관리할 수 있다. 두려움을 테스트로 극복하는 것이다. TDD는 로직이 복잡할 때 빛을 발한다. 간단한 경우에는 아무렇게나 작성.. 2020. 5. 24.
테스트 주도 개발 테스트 주도 개발 책을 읽는 이유 테스트 주도 개발 책을 읽고 블로깅을 하기로 하였쑵니다. 부스트캠프 캐치마이마인드 프로젝트를 진행하면서 어려운 로직을 코드로 구현할 때, 기능만 구현되는 엉망진창의 코드를 짠다는 것을 알게되었습니다. 원인이 무엇일까? 고민을 많이 하였습니다ㅠㅠ. 사고의 과정에는 문제가 없었으나 코드로 풀어나가는 데 문제가 있었고, 코드 구현 방식에 문제가 있음을 알았습니다. 구현을 하고 나면 리팩토링을 하지 않는 습관같은 것들이 문제였습니다. 코드를 구현해도 코드의 수준이 나아지지를 않는 것이였습니다. 테스트 주도 개발 aka TDD는 평소의 구현 습관을 송두리째 바꿔놓습니다. 항상 더 좋은 코드가 있는지 고민하게 만듭니다. 개인적으로는 TDD로 프로젝트를 1개 하는 것이 그렇지 않은 .. 2020. 5. 24.