본문 바로가기

TDD8

[우아한테크코스Pro] 인수 테스트 기반 TDD - 1 [5/9] 5주차 인수테스트 기반 TDD에서는 3주차에서 했던 인수테스트 주도 개발 에서 말하는 인수 테스트 이후 개발 흐름에 대해서 미션이 주어졌습니다. 이번 미션에서는 총 4단계로 구성되어 각 단계마다 많은 코드 작성이 요구되었습니다. 이번 미션 목표 테스트 주도 개발 접근 방법을 이해할 수 있습니다. 단위 테스트에 대한 이해를 높일 수 있습니다. 테스트 주도 개발을 접근하는 방법으로 크게 2가지가 있습니다. 1. Outside In 일반적으로 TDD는 Inside-Out 의 방식을 말합니다. 그러므로, Outside-In는 Top Down으로 진행하고, London School TDD라고도 부르고, Mockist Approach라고도 불린다고 합니다. 아래 그림 1 에서 보여지는 것과 같이 최상위 레이어에서 .. 2021. 7. 1.
[우아한테크코스Pro]로또 구현(테스트 주도 개발)[1/9] 들어가기 이번 한 주동안 우아한테크코스Pro 에서는 테스트 주도 개발로 로또를 구현하는 미션을 받았습니다. 처음에는 간단할 줄 알았던 미션도 하다보니, 생각해야 될 부분- 고민해야될 부분- 생각보다 많았습니다. 특히, 코드를 작성하면서 지켜야 할 부분으로 다음과 같습니다. 경험할 객체지향 생활 체조 원칙 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다. 규칙 2: else 예약어를 쓰지 않는다. 규칙 3: 모든 원시값과 문자열을 포장한다. 규칙 5: 줄여쓰지 않는다(축약 금지). 규칙 8: 일급 콜렉션을 쓴다. 위 규칙은 읽을 때는 간단해 보일지라도, 코드를 작성하는 과정에서 2개의 선과악이 공존하게 만드는 규칙들이였습니다. 고민을 했던 부분 1. 이름 짓기 클래스 이름을 포함해서 패키지를 설계하.. 2021. 5. 28.
Mock 객체란 무엇일까? 왜 써야될까? 아래 내용은 위 책에서 말하는 4장 TDD with Mock 에서 내용을 발췌했습니다. TDD를 공부하면서 Mock 이라는 용어는 너무나도 많이 나오고, 실제로 테스트 프레임워크를 사용하면 Mock 객체를 많이 사용되게 된다. 그놈의 Mock! Mock 객체를 사용해서, 테스트를 용이하게 만들수 있고, 아직 만들어지지 않은 개념을 활용해 내가 만들고자 하는 객체를 구체화시킬 수 있는 도구라는 사실은 알았다. 그러나 문제점은 여기에 있었다. 주로 Mockito 프레임워크를 사용하는데, 각 Mock 객체가 어떤 역할을 하는지 이해하기 어려웠다. 더하여, 어떻게 활용해야 하는지도, 이해하기 어려웠다. 이번 장에서는 다시한번 Mock을 써야하는 이유, 그리고 Mock 객체가 어떤 역할을 하는지, 마지막으로 어떻.. 2021. 3. 11.
TDD 좀 더 잘하기 아래 내용은 고품질 쾌속개발을 위한 TDD 3장 내용을 발췌했습니다. TDD의 한계 이번 장에서는 TDD의 한계 라는 주제로 내용만 다룰까 합니다. 동시성 문제 동시성이 필요한 테스트케이스의 경우, 작성하는데는 문제가 어렵지 않다. 그러나, 테스트 자체를 무결하게 유지하기가 매우 어렵다. 상식적으로 파악하기 어려운 불규칙한 문제가 적지 않게 발생하기 때문이다. 현재 유일한 해결책을 제시하기는 어렵지만 다양한 방식으로 해결한다 그러나 여전히 명확하게 테스트할 수 있는 것은 없는 것 같다. 접근제어자(private/protected 메서드) 테스트할 항목의 접근 제한에 대한 논의. private으로 되어 있는 메소드는 일반적인 방법으로는 테스트가 불가능하다. 그러나, private으로 되어 있어서 접근이 어.. 2021. 3. 11.
테스트 주도 개발 입문해보기 고품질 쾌속개발을 위한 TDD 실천법과 도구 - 1장 내용을 스스로 이해하기 위해 작성하는 글입니다. 1.1 일반적으로 우리의 개발은 다음과 같다. 우리 개발자 자신의 두뇌는 명석하기때문에 개발을 하면서, 문제영역을 발견한다. 문제영역을 발견하고, 이를 해결하기 위해 '기능을 구현' 하고, 일정 시간이 지나면 구현의 '검증' 을 위한 테스트를 수행합니다. 대표적인 방식은 "콘솔에 값 찍어보기?" 위와같이 했을 경우, 주의해야 될 부분으로 문제의 해결 유무 판단을 우리의 두뇌가 하려고 한다는 것이다. 여기서 문제점이 발생한다. 사람의 머리란 간사해서- 상황에 따라서 다른 반응을 하고, 효율도 그때그때 다르다. 고전적인 개발 방식에서의 문제점은 다음과 같다. 1. 특정 모듈의 개발 기간이 길어질수록 개발자의.. 2021. 3. 9.
TDD로 XUnit 만들어 내기 - 1 Java 로 XUnit 프레임워크를 잘 만들수 있을지 모르겠습니다. 아직까지 TDD에 대한 자신감이 붙지 않았다는 증거겠죠? 천천히 수련해봅시다. youtube에 토비님이 Java로 만든 XUnit 이 있지만, 나 스스로 천천히 수련해봅시다. 먼저 요구사항을 나열하면 아래와 같습니다. 1. 테스트 메소드 실행 2. SetUp 메서드 실행 3. TearDown 메서드 실행 4. 테스트 결과 수집 ▶Intellij Test 실패 발생시 No tests found for given includes 이 발생할 경우 @Test public void aaaaa() throws Exception { WasRun wasRun = new WasRun(); assertFalse(wasRun.isRun); wasRun.ru.. 2021. 2. 25.
테스트 더블을 강력한 위력을 이해해보자. 아래 내용은 Effective Unit Testing - 라쎼 코스켈라 에서 발췌한 내용으로 이루어져 있습니다. 0. 들어가기 Stub과 Dummy는 왜 태어났을까? 이 둘의 처음 등장된 가장 큰 이유는 제품에 다른 제품이 준비되기 전까지 대신 사용할 용품이 필요했기 때문이다. 그러나 오늘날, Stub과 Dummy는 처음 나왔던 목적보다, 테스트 추종자에 의해 쓰음새가 다양해졌다. 다양한 테스트 전용 장치가 만들어지면서, 테스트 대상 코드를 격리 속도 개선 예측 불가능한 요소 제거 특수한 상을 시뮬레이션 감춰진 정보를 얻어내는 용도 이같이 목적은 비슷하면서도 다른 객체를 사용하는데 그 전부를 테스트 더블이라고 한다. 그럼 테스트 더블은 우리에게 어떤 득이 있을까? 1. 테스트 더블의 목적 "세상이 변하길.. 2020. 12. 28.
테스트 주도 설계를 실천한다는 것 밥 로스 로스가 대중에게 인상적인 모습을 보인 것 중 하나가, 그림은 형태를 정하고 하나하나 디테일을 정해가면서 그려 나아가는 것이라는 일반인의 고정관념을 깬 것도 한몫 한다. 이미 그린 수풀이 붓으로 몇 번 칠하니 호수가 된다든지 하는 모습은, 그때그때 마음가는 대로 그려 나아가는 것이 낭만적이라는 느낌을 주기도 한데다, 유화를 배우지 않은 일반인 입장에서 보면 신기할 수밖에 없다. - 밥 로스에 대한 평가 우리는 밥 로스라는 사람을 알고 있습니다. 누가봐도 어려운 그림을 "참 쉽죠?(That easy)" 라는 대사로 유명한 밥로스는 그림을 그리는 방식이 특이하다고 합니다. 그림을 그릴 때, 밥 로스는 하얀 캔버스 위에 아주 약간의 덧칠로서 그림 전체의 윤곽을 만들어 완성 시키면서 그 다음 스텝을 이어.. 2020. 12. 18.